Catel/Ninject:解决 IUIVisualizerService 时出现 Ninject.ActivationException [英] Catel/Ninject: Ninject.ActivationException when resolving IUIVisualizerService

查看:83
本文介绍了Catel/Ninject:解决 IUIVisualizerService 时出现 Ninject.ActivationException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试解决 IUIVisualizerService 时,Ninject.ActivationException 出现在 Ninject.dll 中.

when i was trying to resolve the IUIVisualizerService a Ninject.ActivationException came up in Ninject.dll.

有人可以帮我吗?

此代码部分调用了问题:

This code section calls the problem:

NinjectDependencyResolver resolver = new NinjectDependencyResolver();
            var item = resolver.GetService<IUIVisualizerService>();

解析器代码:

using System;
    using System.Collections.Generic;
    using Catel.Services;
    using Ninject;
    using NLog;

    namespace MS_Modell.Infrastructure
    {
        internal class NinjectDependencyResolver
        {
            private IKernel kernel;
            private Logger log = LogManager.GetCurrentClassLogger();

            public NinjectDependencyResolver()
            {
                try
                {
                    kernel = new StandardKernel();
                    kernel.Bind<IUIVisualizerService>().To<UIVisualizerService>();
                }
                catch (Exception ex)
                {
                    log.Fatal("NinjectDependencyResolver(): " + ex);
                    throw;
                }
            }

            public T GetService<T>()
            {
                try
                {
                    return kernel.TryGet<T>();
                }
                catch (Exception ex)
                {
                    log.Fatal("GetService<T>(): " + ex.Message);
                    throw;
                }
            }       
        }
    }

在调用 GetService 后我得到了一个空对象.但是没有引发异常.只能在 Visual Studio 的控制台输出上看到一条消息:

I got a null object after GetService is called. But the exception wasnt raised. Only a message on the console output of Visual Studio can be seen:

在 Ninject.dll 中抛出了Ninject.ActivationException"类型的异常(第一次机会).

An expcetion (first chance) of type "Ninject.ActivationException" was thrown in Ninject.dll.

编辑 2:

感谢伙计们的快速回答.以下是遇到同样问题的人的具体解决方案:

Thx guys for the fast answers. Here is the concrete solution for someone, who runs into the same problem:

在 NinjectResolver 中,您需要添加以下代码:

In NinjectResolver you need to add this code:

    kernel.Bind<IViewLocator>().To<ViewLocator>();
    kernel.Bind<IUIVisualizerService>().To<UIVisualizerService>().WithConstructorArgument("ViewLocator", GetService<IViewLocator>());

解决 IUIVisualizerService:

Resolving the IUIVisualizerService:

TargetSelectorViewModel selector = new TargetSelectorViewModel();
                var item = resolver.GetService<IUIVisualizerService>();
                item.Register(typeof(TargetSelectorViewModel), typeof(TargetSelector));
                item.ShowDialog(selector);

推荐答案

UIVisualizerService 需要对 IViewLocator 进行依赖注入.确保 Ninject 也能解决这个问题.

The UIVisualizerService requires dependency injection of the IViewLocator. Make sure that Ninject can resolve that as well.

https://github.com/Catel/Catel/blob/develop/src/Catel.MVVM/Catel.MVVM.NET40/Services/UIVisualizerService.cs#L54

这篇关于Catel/Ninject:解决 IUIVisualizerService 时出现 Ninject.ActivationException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆