2013-09-22 214 views
1

在使用Ninject開發WPF應用程序時,我分析了一些集合只能在代碼中存在一次。將集合綁定到Ninject

例如,主窗口包含項目選項卡的內部列表,類似於瀏覽器中的選項卡。主窗口的視圖模型包含這個屬性ObservableCollection<ProjectViewModel> ...我的想法是,嘿,ProjectViewModel只有一個,只有一個ObservableCollection。如果我將這種類型與Ninject綁定爲單例,會發生什麼?

所以我寫了這樣的事情......

if (ViewModelBase.IsInDesignModeStatic) //pure WPF design mode check looks 
             //differently (this is MVVM Light) 
{ 
    kernel.Bind<ObservableCollection<Project>>().ToMethod((c) => 
    { 
     return new ObservableCollection<Project>() { new Project("Lorem", "Ipsum") }; 
    } 
} 
else 
{ 
    kernel.Bind<ObservableCollection<Project>>() 
      //.ToSelf() <-- ToSelf() does not work 
      .ToMethod((c) => 
      { 
       return new ObservableCollection<Project>(); 
      }).InSingletonScope(); 
} 

和它的作品!在設計模式中,我實際上看到「Lorem」和「Ipsum」,並且在運行時,代碼似乎按預期工作,主視圖模型中的集合爲空。代碼看起來很不錯並且可讀。

但是,我懷疑和懷疑,我覺得我做的事情真的很髒和壞,因爲我找不到任何類似的代碼的例子,類的集合類型綁定到某個實現。但我可能沒有找到足夠的。

在Ninject中綁定了一些類的好主意的集合?這可能會導致任何意外的問題?

+0

'IsInDesignModeStatic'呵呵? *靜態?*您不是真的將單詞「靜態」放在靜態方法名稱中,以表明它是靜態的,是嗎? – Will

+0

這是MVVM Light屬性 – Mirek

+0

Eeew。我的意思是,嚴肅地說, – Will

回答

0

我真的不覺得那太髒了。這一切都保存在引導程序中,所以很容易去看看那裏,看看行爲是什麼。您正在推動地毯下的所有控制狀態,以便在代碼的其他部分保持清潔。