我是Ninject的新手(使用最新的v3)。 我得到了基本工作正常(包括没有模块的命名绑定,即直接在内核上),但我无法使用模块。
该模块如下所示:
public class MainModule : NinjectModule
{
public override void Load()
{
Bind<Window>().ToMethod(context => App.Current.MainWindow).Named("MainWindow");
}
}
我正在使用它:
public MainViewModel Main
{
get
{
return kernel.Get<MainViewModel>("MainWindow");
}
}
导致ActivationException告诉我“没有匹配的绑定可用”。没有命名绑定,它可以正常工作。
如何将命名绑定与模块一起使用?
答案 0 :(得分:1)
您绑定Window
但请求MainViewModel
。这两件事之间没有相关性。所以我没有为什么你认为这应该有效。
没有它的名称它是有效的,因为像MainViewModel
这样的自绑定对象是隐式绑定到它们自己的。这就是它工作的原因。
更新
如果我理解正确,那么你想要
Bind<Window>().ToMethod(context => App.Current.MainWindow).WhenParentNamed("MainWindow");
Bind<MainViewModel>().ToSelf().Named("MainWindow");