2012-05-08 25 views
3

背景:我試圖讓我們MEF導入兩個實現IFoo的程序集。這樣做,毫不奇怪,我使用[ImportMany]導入所有給我一個IEnumerable>。然後,我的消費邏輯根據MetaData「Bar」確定要使用哪個導入程序集。如何使用MEF IsMultiple屬性

每個導出器都裝有一個ExportMetadata屬性。這工作得很好,當我有:

[Export(typeof(IFoo))] 
[ExportMetadata("Bar", "Hello")] 
public class Hello : IFoo 
{...} 

[Export(typeof(IFoo))] 
[ExportMetadata("Bar", "World")] 
public class World: IFoo 
{...} 

也就是說,我的IEnumerable有兩個IFoos。

我想定義一個作爲默認,所以如果不需要「你好」或「世界」,我會尋找與「默認」作爲我的酒吧元數據。我試圖做到這一點使用IsMultiple屬性是這樣的:

[Export(typeof(IFoo))] 
[ExportMetadata("Bar", "Hello", IsMultiple = true)] 
[ExportMetadata("Bar", "Default", IsMultiple = true)] 
public class Hello : IFoo 
{...} 

問題:當我加入IsMultiple屬性和第二屬性,Hello類不再被拉入導致的IEnumerable。

問題:如何爲第二個/默認指定的MEF標記一個類?

謝謝!

回答

3

要在類中顯示多個完全獨立的導出,最好的方法是使用多個'屬性導出',在這種情況下返回'this'。

class Hello: IFoo 
{ 
    [Export, ExportMetadata(...)] 
    public IFoo Bar { get { return this; } } 

    [Export, ExportMetadata(...)] 
    public IFoo Default { get { return this; } } 
}