2012-12-06 76 views
0

我們正在使用MEF按名稱導入和導出代表。使用帶MEF的類型導出和導入代表

public delegate IThing ThingGenerator(); 

[Export("ThingGenerator")] 
public IThing MyThingGenerator() { ... } 

[ImportMany("ThingGenerator")] 
public IEnumerable<ThingGenerator> ThingGenerators { get; set; } 

爲了可維護性,我們想用導入和導出類型。但是,我們似乎無法完成這項工作。

[Export(typeof(ThingGenerator))] 
public IThing MyThingGenerator() { ... } 

[ImportMany(typeof(ThingGenerator))] 
public IEnumerable<ThingGenerator> ThingGenerators { get; set; } 

在某些表單中,我們收到錯誤,指出導出的函數與委託類型不匹配。在其他情況下,類型似乎不會被導出。有沒有人成功做到這一點?

回答

3

您可以實際類型的導入和導出,只有在你的情況,你應該嘗試出口和進口替代的typeof(ThingGenerator)一個typeof運算(IThing)。

通常情況下,出口部分實現一些接口(可以是一個空的接口,它就像一個標籤),這樣你就可以找出你導入什麼,但它的工作原理也與類型。

這裏是一個不錯的視頻教程,以幫助您開始使用MEF(這是在Silverlight,但工程也爲WPF,也應該適用於的WinForms) Part 1 Part 2

檢查第2部分,它可能是當他使用元數據創建自定義導出屬性時特別有用。

希望這會有所幫助,關心

+0

我同意你的意見。另一種方法是使用ThingGenerator工廠類生成一個Generate方法。 –