背景: 我试图让 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”作为我的 Bar 元数据的那个。我试图使用这样的 IsMultiple 属性来做到这一点:
[Export(typeof(IFoo))]
[ExportMetadata("Bar", "Hello", IsMultiple = true)]
[ExportMetadata("Bar", "Default", IsMultiple = true)]
public class Hello : IFoo
{...}
问题: 当我添加 IsMultiple 属性和第二个属性时,Hello 类不再被拉入生成的 IEnumerable。
问题: 如何使用第二个/默认名称为 MEF 标记一个类?
谢谢!