【发布时间】:2012-05-08 15:21:02
【问题描述】:
背景:我正在尝试让 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 有两个 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 标记一个类?
谢谢!
【问题讨论】: