2011-11-01 40 views
2

我假定當在NinjectModule我結合Ninject InSingletonScope()視圖模型不是在結合

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返回到應用程序中的其他代碼。

回答

3

如果您的SplashWindow將SplashViewModel作爲ctor參數,那麼Ninject會爲您進行初始化。你甚至不需要定義SplashWindow綁定。

+0

或者在SplashWindow的'DataContext'屬性上放置'[Inject]'屬性。那麼就讓你的SplashWindow綁定一個正常的自綁定。 –

0

我已經通過下面的綁定方法解決該問題的工作:

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

我不知道這是否是完美的解決方案,但。

相關問題