后台:我正在尝试让MEF导入两个实现IFoo的程序集。为此,毫不奇怪,我正在使用[ImportMany]导入所有给我一个IEnumerable>。然后我的消费逻辑根据MetaData“Bar”确定要使用哪个导入的程序集。
每个导出器都使用ExportMetadata属性进行修饰。当我有:
时,这很好用[Export(typeof(IFoo))]
[ExportMetadata("Bar", "Hello")]
public class Hello : IFoo
{...}
[Export(typeof(IFoo))]
[ExportMetadata("Bar", "World")]
public class World: IFoo
{...}
也就是说,我的IEnumerable有两个IFoos。
我想将一个定义为默认值,因此如果不需要“Hello”也不需要“World”,我会查找带有“Default”作为我的Bar元数据的那个。我试图使用IsMultiple属性这样做:
[Export(typeof(IFoo))]
[ExportMetadata("Bar", "Hello", IsMultiple = true)]
[ExportMetadata("Bar", "Default", IsMultiple = true)]
public class Hello : IFoo
{...}
问题:当我添加IsMultiple属性和第二个属性时,Hello类不再被拉入生成的IEnumerable中。
问题:如何使用第二个/默认名称为MEF标记类?
谢谢!
答案 0 :(得分:3)
要在类这样的类上公开多个完全独立的导出,最好的方法是使用多个“属性导出”,在这种情况下返回“this”。
class Hello: IFoo
{
[Export, ExportMetadata(...)]
public IFoo Bar { get { return this; } }
[Export, ExportMetadata(...)]
public IFoo Default { get { return this; } }
}