0

我是 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 告诉我“没有匹配的绑定可用”。如果没有命名绑定,它可以正常工作。

如何将命名绑定与模块一起使用?

4

1 回答 1

1

您具有约束力Window,但请求MainViewModel. 这两件事之间没有相关性。所以我不知道为什么你认为这应该有效。

没有名字它就可以工作,因为像这样的自绑定对象MainViewModel是隐式绑定到自己的。这就是它起作用的原因。

更新:

如果我理解正确,那么你想要

Bind<Window>().ToMethod(context => App.Current.MainWindow).WhenParentNamed("MainWindow");
Bind<MainViewModel>().ToSelf().Named("MainWindow");
于 2012-11-01T12:07:09.693 回答