我正在瀏覽Unity 2.0以檢查它是否在我們的新應用程序中有效使用。我的應用程序是Windows Forms應用程序,目前使用傳統的酒吧菜單(位於頂部)。在動態菜單中應用Unity
我的UI(Windows窗體)或多或少支持依賴注入模式,因爲它們都通過構造函數提供給它們的類(Presentation Model Class)。表單然後綁定到提供的P Model類的屬性並調用P Model類中的方法來執行其職責。非常簡單直接。
P模型如何對UI動作作出反應,並通過協調域類(業務邏輯/模型)對它們做出響應在此處不相關,因此未提及。
對象的創建順序顯示一個UI從菜單則是這樣的 -
- 創建商業模式的實例
- 創建商業模式的實例傳遞至P型構造演示模型實例。
- 使用傳遞給UI構造函數的Presentation Model實例創建UI實例。
我目前的解決方案:
要顯示在上面,從我的菜單我會從我的菜單類是指所有組件(業務,PModel,UI)的方法的UI。考慮到我已經將模塊拆分爲多個物理組件,那麼添加對大約60個不同組件的引用將是一項艱鉅的任務。此外,這種方法的可擴展性不是很好,因爲我肯定需要發佈更多的模塊,並且通過這種方法,我每次發佈新模塊時都必須更改源代碼。
所以主要是爲了避免如此多的組件從我的菜單類(組裝)參考我做了如下 -
上面存儲在數據庫表(SQL Server)的描述的所有依賴,例如
ModuleShortCode | BModelAssembly | BModelFullTypeName | PModelAssembly | PModelFullTypeName | UIAssembly | UIFullTypeName
現在使用名爲「啓動器」帶方法「啓動」靜態類,如下 -
Launcher.Launch("Discount");
Launcher.Launch("Customers");
啓動程序在內部從依賴關係表使用數據,並使用Activator.CreateInstance()來創建每個對象並將該實例用作構造函數參數,直到創建UI爲止。 UI然後顯示爲模態對話框。啓動器內的代碼有點像 -
Form frm = ResolveForm("Discount");
frm.ShowDialog();`
ResolveForm可以完成構建對象鏈的技巧。
Unity可以幫助我嗎?
現在當我這樣做時,我沒有足夠的關於Unity的信息,現在我已經學習了Unity,我認爲我一直在做或多或少的相同的事情。所以我試圖用Unity代替我的代碼。
但是,一旦我開始我打了一個街區。如果我嘗試在我的菜單來解決UI形式
Form customers = myUnityContainer.Resolve<Customers>();
或
Form customers = myUnityContainer.Resolve(typeof(Customers));
然後無論哪種方式,我需要從我的菜單組件是指我的UI組件,因爲目標類型「客戶」需要以Unity着稱解決它。所以我回到了同一個地方,因爲我不得不從菜單程序集中引用所有UI組件。據我所知,使用Unity我都將不得不提及較少的組件(只UI組件),但需要這些引用這違背了我下面的目標 -
動態,而不從菜單裝配任意組裝的參考對象創建的鏈條。這是爲了避免每次釋放新模塊時更改菜單源代碼。我的菜單也是從表格動態構建的。
只需提供新的程序集並通過數據庫補丁程序在表中插入新的Dependency行,就能夠提供新的模塊。
在這個階段,我有一種感覺,我必須這樣做,即Activator.CreateInstance()來完成我所有的目標。我需要驗證社區是否像我一樣思考或者有更好的建議來解決問題。
該帖子真的很長,我真誠地感謝你,如果你來到這一點。等待您的寶貴建議。
- Rajarshi
太棒了!這是我忽略的一個有趣的信息。沒有時間測試,但它應該工作。非常感謝。 – Rajarshi 2010-04-28 09:01:02
沒有時間檢查代碼,現在檢查。它工作順利。它解決了引用太多程序集和提供新程序集的主要問題。謝謝。 – Rajarshi 2010-05-08 07:37:59