[英]Catel/Ninject: Ninject.ActivationException when resolving IUIVisualizerService
當我嘗試解析IUIVisualizerService時,Ninject.dll中出現Ninject.ActivationException。
有人可以幫我嗎?
此代碼段稱為問題:
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的控制台輸出上看到一條消息:
Ninject.dll中引發了“ Ninject.ActivationException”類型的期望(第一次機會)。
編輯2:
謝謝你們的快速解答。 這是遇到相同問題的人的具體解決方案:
在NinjectResolver中,您需要添加以下代碼:
kernel.Bind<IViewLocator>().To<ViewLocator>();
kernel.Bind<IUIVisualizerService>().To<UIVisualizerService>().WithConstructorArgument("ViewLocator", GetService<IViewLocator>());
解決IUIVisualizerService:
TargetSelectorViewModel selector = new TargetSelectorViewModel();
var item = resolver.GetService<IUIVisualizerService>();
item.Register(typeof(TargetSelectorViewModel), typeof(TargetSelector));
item.ShowDialog(selector);
UIVisualizerService需要IViewLocator的依賴項注入。 確保Ninject也可以解決該問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.