2
的問題是,如果存在具有相同出口的簽名,但只有一個應導入(這是可能的兩個出口元件,實際的例子是安裝新插件來替換舊的一個沒有卸載舊的。)。我們可以提供一個配置文件來告訴哪個組件應該被導入,但問題是如何告訴MEF正確的選擇?
我有三個方法:
使用自定義的目錄,篩選可用的插件。但假設A導入組件A和B時導入組件B,而組件A和B具有相同的導出簽名。除非我們爲每個組件創建新的自定義目錄,否則自定義目錄無法處理此問題。
MEF構圖中的截取。我不確定這是否可能,我不知道如何。但是,如果我們在構圖過程中攔截,這可能是最好的一種。
使用導入包裝而不是真實接口。當組件構成,它將初始化包裝並讓包裝處理選擇邏輯(如提示一個窗口,並讓用戶選擇一個或讀取配置)
是的,[ImportMany]可以解決,但這會強制所有組合組件處理插件選擇邏輯本身。我試圖避免這一點。 – 2012-02-08 06:43:00
請參閱http://stackoverflow.com/questions/7750640/intercepting-dependencies-in-mef,這可能有所幫助,實施ExportProvider可能會遇到鏈接方法2 – 2012-02-08 07:56:11
thx。如果你有你的東西工作,請發佈這裏作爲答案。 – blindmeis 2012-02-08 09:35:46