Catel/Ninject:解决 IUIVisualizerService 时出现 Ninject.ActivationException [英] Catel/Ninject: Ninject.ActivationException when resolving IUIVisualizerService
问题描述
当我尝试解决 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.
这篇关于Catel/Ninject:解决 IUIVisualizerService 时出现 Ninject.ActivationException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!