gpt4 book ai didi

.net - MEF:将未标记为 [export] 的部件添加到 CompositionContainer

转载 作者:行者123 更新时间:2023-12-02 15:10:06 24 4
gpt4 key购买 nike

基于此问题的答案What's the difference between CompositionBatch and catalogs?其中指出,在对象由其他组件构建的情况下,组合批处理的使用非常有用。这让我思考,它适用于现实生活中的哪个例子?然后我开始思考那些你无法控制的构建对象。如果您无法添加未标记为导出的部件,您将如何将这些实例添加到容器中?唯一想到的就是设置一个具有所需类型成员的类并将其标记为导出。

如果实例未标记为导出,是否可以将实例添加到容器中?

最佳答案

我假设您的意思是“未标记为导出的类”而不是“实例”。

对于 .NET4.5 及更高版本,您可以使用 MEF's convention model .

对于 .NET4,Mark Seemann 有 blogged关于如何巧妙地使用泛型和属性导出来导出现有类型。您可以创建一个这样的类:

public class MefAdapter<T> where T : new()
{
private readonly T export;

public MefAdapter()
{
this.export = new T();
}

[Export]
public virtual T Export
{
get { return this.export; }
}
}

然后您可以构建一个类型目录来导出不支持 MEF 的现有类型,如下所示:

var catalog = new TypeCatalog(
typeof(MefAdapter<Foo>),
typeof(MefAdapter<Bar>),
...);

您可以修改此示例以添加对带有构造函数参数的类型的支持、导出接口(interface)而不仅仅是类类型等。

关于.net - MEF:将未标记为 [export] 的部件添加到 CompositionContainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11112743/

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