我的應用程序允許用戶編寫可在運行時實例化的插件(實現IPlugin)。在啓動時,解析插件.dll的目錄,註冊所有可用的插件信息。在運行時提供了一個GUI,使用戶可以創建任何插件的實例。這工作正常。在運行時使用MEF加載插件
但是現在我看到了MEF,並希望我可以做同樣的事情,但以更加優雅的方式代碼化。
我到目前爲止與MEF工作:在啓動時,我正在導入一個目錄中的所有插件(導出IPlugin)並讀出名稱,類別,作者等信息......這些被編碼爲插件類的導出元數據屬性。導入是懶惰的,所以所有的插件在啓動時都沒有實例化,這很重要。
問題是,現在我不明白的方式在運行時優雅實例化一個選擇的插件提供的額外的複雜的插件的構造是其輸入參考到IPluginHost(它需要一個進口構造立即做一些初始化)。
與plugininfo一起,我在啓動過程中將相應的導出保存在字典中,因此當GUI要求實例化給定特定插件信息的插件時,我可以訪問導出(其中Export.Value是我的實際IPlugin)。但是從那裏我怎麼能創建插件的一個實例,並與IPluginHost組成?
我收集我應該編寫自己的ExportProvider,當有人詢問IPluginHost,但我沒有訪問程序集或特定插件的類型,它可以讓我將它添加到目錄,添加目錄和ExportProvider添加到容器並在該容器上調用.ComposeParts。
我希望我做了我的問題清楚,如果沒有,讓我來試試問題的短版: 是不是對MEF標準的用例有一個程序在啓動的時候懶加載插件解析可用的插件信息,然後在運行時創建特定的實例給予特定的plugininfos?將很好的獲得所涉及步驟的代碼行。
您是否已經成功使用MEF 2預覽版1,我遇到了與.NET 4.0 System.Components.Composition的裝配衝突! ExportFactory特別是我想要的! – 2010-07-23 09:12:31
對於遲到的回答感到抱歉。按照解釋,我能夠用ExportFactory解決我的問題。儘管使用.net 3.5。 – joreg 2010-07-25 11:27:14