2010-12-02 72 views
30

我下載了Prism v4並運行安裝程序。我走進目錄並運行下列兩個批處理文件:棱鏡v4:Unity還是MEF?

  • 桌面只 - 開放式模塊化MEF的QuickStart.bat
  • 桌面只 - 開放式模塊化設計將統一QuickStart.bat

當我編譯這些應用程序,我沒有看到任何真正的區別。我搜索了MEF vs Unity,並且發現了一些優點/缺點,但沒有具體說明在棱鏡中是否「更好」(並且我知道這是主觀的)。我想也許如果我列出我的要求,有人可以指出我使用正確的技術(即使它不是棱鏡4)。

  • 該應用程序是用WPF編寫的(不是 Silverlight)。
  • 主要應用程序將非常薄。
  • 主應用程序將使用Web服務構建一個人有權訪問的「應用程序/模塊」菜單。
  • 「應用程序/模塊」將完全包含在其他託管庫中。
  • 主應用程序通過反射到這些DLL中來獲取視圖和視圖模型。
  • 主應用程序應該將服務記錄到這些「應用程序/模塊」中。

例如:

一個基本的用戶可能的選項:

  • ViewOnly地址記錄

所有項目地址相關的內ADDRESS.DLL。

高級用戶可能的選項:

  • 新地址記錄
  • 打開地址記錄(更新/刪除)
  • 管理用戶

所有項目地址相關的在Address.dll中。
所有管理相關的項目都在Admin.dll中。

應用程序不應該實際引用這些DLL中的任何一個,我打算將它們反映到它們中,以便如果有100個不同的模塊並且用戶只能訪問其中的2個,則只會下載並使用其中的2個。而有權訪問其中10個的用戶將獲得這10個。

我已經通過WebService解決了下載DLL問題。 :)

+0

使用Prism與Unity和WPF中的2.1 ......迄今爲止一直很開心,雖然沒有親自使用過MEF ... – 2010-12-02 21:52:51

+0

你最終結伴了什麼?我在看一個類似的範圍項目,所以你的輸入會很好。 – John 2011-12-08 18:52:34

+0

@John:純MEF。 – 2011-12-08 19:46:22

回答

21

沒有「更好」:他們是不同的東西。

IMO您的選擇應該僅由您的要求驅動。根據你在這裏發佈的要求,我建議你使用MEF,因爲你有DLL中包含的模塊,主應用程序不知道要加載的模塊。這些任務是MEF爲什麼存在的原因。

反正你可以使用這兩個:MEF的模塊化和統一採取依賴注入的優點(可測試性,可重用性,...)

4

如果所有的模塊都不能在同一時間,應用程序重新編譯,那麼MEF爲您提供了很多方法來應對主應用程序中不斷變化的界面。否則MEF 可能會更復雜,那麼你需要。

2

我一直在用PRISM使用Unity一年,但我注意到一些嚴重的內存泄漏問題。因此我決定給PRISM 4和MEF一個去。我所做的是首先將我的應用程序轉換爲使用Unity的PRISM 4。然後我轉換了一個分支來使用MEF。 這可能聽起來很有趣,但MEF似乎處理內存消耗和釋放比Unity更好。

很高興聽到其他人是否有相同的經歷?

2

關於你的問題,MEF和UNITY是否可以很好地相互工作,我可以告訴你,他們工作得很好。我開發了使用PRISM,Unity和MEF的概念驗證應用程序。