1

那麼,我遇到了使用Unity的情況,我不知道如何解決/方法......這是我的問題。Unity IoC和註冊原始類型

我正在開發一個WPF應用程序,我使用MVVM(Prism Implimentation因此是Unity容器)。我有一個名爲MenuItemsViewModel(複數)的ViewModel,其中包含IEnumerableMenuItemViewModel(單數)。在MenuItemsViewModel我是從這樣的生成函數填充這個集合的構造......

yield return new MenuItemViewModel(eventAggregator) 
    { 
     Text = "Dashboard", 
     CommandText = "DASHBOARD"  
    }; 
    yield return new MenuItemViewModel(eventAggregator) 
    { 
     Text = "Areas", 
     CommandText = "AREAS" 
    }; 
    yield return new MenuItemViewModel(eventAggregator) 
    { 
     Text = "Users", 
     CommandText = "USERS" 
    }; //etc.... 

我真的不希望被這樣做,而是依靠容器來構建這些對象爲我但是我怎麼知道神的名字呢?我真的不希望我的Item ViewModel對我的Item ViewModel有任何知識,除了它實現的接口外,我已經獲得了大約15個這些菜單項,每個菜單項都有不同的屬性值。

我並不是全新的DI/IoC,但這對我來說是一個很大的問題。我看到並從注入服務中受益,但您對具體價值做了什麼?

我在這裏完全用錯誤的詞彙表達嗎?我應該只是解決容器和然後設置屬性的具體實例嗎?這將是一個選擇,但我希望我的道具儘可能只讀。

我希望這是足夠清晰,..我大喊如果不是:-)

任何幫助深表感謝。

回答

1

我會用決心陣列注入菜單項:

container 
    .RegisterInstance("DASHBOARD", new MenuItemViewModel(...)) 
    .RegisterInstance("AREAS", new MenuItemViewModel(...)) 

    .RegisterType<MenuItemsViewModel>(
    new InjectionConstructor(new ResolvedArrayParameter<MenuItemViewModel>())) 
+2

其實,如果MenuItemsViewModel有一個構造函數一個MenuItemViewModel [](必須是一個數組),那麼默認的相關決議應踢,將自動爲您注入MenuItemViewModel的所有命名實例。 – 2010-09-16 18:01:30

+0

@Chris你是對的+1 – onof 2010-09-17 11:04:38

+0

天才,......天才!非常感謝 :-) – Stimul8d 2010-09-17 11:32:03