2013-08-27 40 views
1

基於Create composite modular UI application in WPF using MEF and PRISM文章的指導,我正在構建一個小型,簡單的(現在)模塊化應用程序。到目前爲止,我有一個主窗口,有兩個區域,一個Bootstrapper類,以及兩個模塊項目ModuleA和ModuleC,它們只導出它們自己。他們還每個地方AA視圖在主窗口的地區之一(一個UserControl),例如:如何在基於MEF的模塊化應用程序中公開模塊功能?

[ModuleExport(typeof(ModuleC))] 
public class ModuleC: IModule 
{ 
    public void Initialize() 
    { 
     IRegionManager regionManager = (IRegionManager)ServiceLocator.Current.GetInstance(typeof(IRegionManager)); 
     regionManager.Regions["Region2"].Add(new MoneyUserControl()); 
    } 
} 

我的目標是有一個大的UI區域在MainWindow,其被使用的電流,高正在使用高級應用程序功能,並且此功能是導入的模塊。雖然這些模塊有許多共同點,並且目前是單片應用程序的一部分,但我基本上只是努力提供基本服務的框架(MainWindow),而應用程序的每個功能都作爲模塊導入。

我希望活動模塊向主窗口提供菜單項(命令)。我很容易用「手動」來做這件事,例如,一個IModuleWithMenu接口,並有主窗口查詢和整合的菜單,或在主窗口中的「IMenuHost`接口,並具備模塊推它的菜單命令英寸

不過,我不禁想一定作爲我已經使用MEF的一種更好的方式,並且具有加載模塊的導出和導入目錄。當然,我可以查詢導出並過濾那些命令,並將它們連接到菜單或其他形式的命令調用,但不提供像這樣已經完成或關閉的東西,我將我自己的代碼放到最小化,從而也就是bug的風險。

另外,額外的問題:有沒有人有複製或鏈接到建設具有MEF的複合應用程序(主要在WPF中,但我可以適應其他WPF)的複合應用程序的真正好的教程問題,因爲它應該完成。我所做的文章僅僅是對模塊,目錄和MEF本身的簡單介紹。我真的很喜歡一些東西,真正的技術性和深度。圖書購買甚至可能是有序的。

回答

2

雖然我不知道任何有關創建MEF WPF Prism應用程序的教程,但我目前正在開發這些應用程序中的很多,因此我可以提供一些我使用的技巧。

我要說的第一件事是,既然你使用MEF,你應該使用它使用它。你不需要使用ServiceLocator。導入即IRegionManager!另一件我非常喜歡MEF與Prism中的其他IoC容器相比,我通常不會編寫IModule實現。您的模塊不會定義導出,因爲這是使用屬性處理的。我創建了一個自定義Attribute以將View導出爲Region,以及將基礎結構IModule將這些視圖與其區域一起註冊。

若要將Menu添加到您的應用中,我認爲最好的辦法是將Menu作爲單獨的View導出。那麼你會有一個Region,這只是ContentControl命名像MenuRegion。如果您有多個視圖註冊Menu,則當主視圖更改時,他們可以在菜單區域上調用。當然,你可以使用一個接口(或者一個可以修飾你的主視圖的屬性)來構建基礎設施的這一部分,這樣單個視圖就不必重寫相同的代碼。

如果你想有一些全局命令以及出口菜單命令,你可能會需要做的兩兩件事之一:

  • 創建自定義IRegionAdapter管理如何添加菜單項。在這種情況下,我建議導出您的頂級MenuItem對象。您也可以將個別MenuItem定義爲區域。與FileMenuRegion一樣,您可以將MenuItem添加到File菜單。
  • 使用名稱導出ICommand,使用特殊的 導出ImportMany,它處理如何添加命令。這可能會更復雜一些,因爲您需要找出創建菜單層次結構的方法。您可能需要一些可以比ICommand更完整地描述菜單的新界面。
+0

謝謝你的回答。它使我得到更多的閱讀和學習。 – ProfK

相關問題