.net 4.0 如何使用MEF IsMultiple属性

.net 4.0 如何使用MEF IsMultiple属性,.net-4.0,mef,.net 4.0,Mef,背景:我正在尝试使用MEF导入两个实现IFoo的程序集。为了做到这一点,毫不奇怪,我使用[ImportMany]导入所有内容,并给我一个IEnumerable>。然后,我的消费逻辑根据元数据“Bar”确定要使用哪个导入的程序集 每个导出器都有一个ExportMetadata属性。当我: [Export(typeof(IFoo))] [ExportMetadata("Bar", "Hello")] public class Hello : IFoo {...} [Export(typeof(IF

背景:我正在尝试使用MEF导入两个实现IFoo的程序集。为了做到这一点,毫不奇怪,我使用[ImportMany]导入所有内容,并给我一个IEnumerable>。然后,我的消费逻辑根据元数据“Bar”确定要使用哪个导入的程序集

每个导出器都有一个ExportMetadata属性。当我:

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

[Export(typeof(IFoo))]
[ExportMetadata("Bar", "World")]
public class World: IFoo
{...}
也就是说,我的IEnumerable有两个Ifoo

我想将一个定义为默认值,因此如果不需要“Hello”或“World”,我将查找带有“default”的一个作为我的酒吧元数据。我尝试使用IsMultiple属性来执行此操作,如下所示:

[Export(typeof(IFoo))]
[ExportMetadata("Bar", "Hello", IsMultiple = true)]
[ExportMetadata("Bar", "Default", IsMultiple = true)]
public class Hello : IFoo
{...}
问题:当我添加IsMultiple属性和第二个属性时,Hello类不再被拉入结果IEnumerable中

问题:如何使用第二个/默认名称为MEF标记类


谢谢

要在这样的类上公开多个完全独立的导出,最好的方法是使用多个在本例中返回“this”的“属性导出”

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

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