Ninject InSingletonScope()视图模型未在绑定时分配给视图

时间:2011-11-01 00:37:07

标签: .net mvvm inversion-of-control ninject

我假设在NinjectModule中我绑定

Bind<SplashViewModel>().ToSelf().InSingletonScope();

SplashViewModel的一个实例正在Ninject内核中缓存,每次调用kernel.Get<SplashViewModel>时,我都会得到一个返回给我的视图模型的相同实例。这就是真实的事情。

NinjectUIModule我致电:

Bind<SplashViewModel>().ToSelf().InSingletonScope();
Bind<SplashWindow>().ToMethod(context => new SplashWindow()
                                                       {
                                                           DataContext = new SplashViewModel()
                                                       });

问题是SplashWindow获取了SplashViewModel的不同新实例,而不是在Ninject内核中缓存的实例,并返回给所有其他检索方。

如何将视图模型绑定到Ninject模块中的View的DataContext,并允许它稍后通过kernel.Get返回到应用程序中的其他代码。

2 个答案:

答案 0 :(得分:3)

如果您的SplashWindow将SplashViewModel作为ctor arg,那么Ninject将为您完成初始化。您甚至不需要定义SplashWindow绑定。

答案 1 :(得分:0)

我通过以下绑定方法解决了这个问题:

class NinjectUIModule: NinjectModule
    {
        public override void Load()
        {
            Bind<SplashViewModel>().ToSelf().InSingletonScope();
            Bind<SplashWindow>().ToMethod(context => new SplashWindow()
                                                         {
                                                            DataContext = Kernel.Get<SplashViewModel>()
                                                         });
        }
    }

我不确定这是否是完美的解决方案。