基于此问题的答案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/