我假设在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返回到应用程序中的其他代码。
答案 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>()
});
}
}
我不确定这是否是完美的解决方案。