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

时间:2012-11-01 04:19:59

标签: ninject

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

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

1 个答案:

答案 0 :(得分:1)

您绑定Window但请求MainViewModel。这两件事之间没有相关性。所以我没有为什么你认为这应该有效。

没有它的名称它是有效的,因为像MainViewModel这样的自绑定对象是隐式绑定到它们自己的。这就是它工作的原因。

更新

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

Bind<Window>().ToMethod(context => App.Current.MainWindow).WhenParentNamed("MainWindow");
Bind<MainViewModel>().ToSelf().Named("MainWindow");