gpt4 book ai didi

.net-4.0 - 如何使用 MEF IsMultiple 属性

转载 作者:行者123 更新时间:2023-12-03 18:15:09 24 4
gpt4 key购买 nike

背景:我正在尝试使用 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 标记类?

谢谢!

最佳答案

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

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

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

关于.net-4.0 - 如何使用 MEF IsMultiple 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10501560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com