如何在MEF中导出类型,就像导出属性已应用于该类型一样?

时间:2010-11-17 22:02:24

标签: .net mef composition system.componentmodel

我想在运行时动态地将MEF Export属性应用于某个类型,就好像该类型在编译时应用了Export属性一样。

有一种简单的方法吗?

除此之外,有没有一种复杂的方法可以做到这一点?

2 个答案:

答案 0 :(得分:7)

如果你能负担得起使用.NET 4.5(这意味着放弃Windows XP支持),你现在可以使用MEF的attribute-less registration又名Convention Model

在.NET4或更早版本的MEF预览版中,不支持开箱即用,但仍可以通过创建自己的ExportProviderComposablePartCatalog实现来扩展MEF。

MEF Contrib Fluent Definition Provider是一种允许您通过方法调用注册导入和导出的实现。

MEF Contrib Configurable Definition Provide r是另一个允许您在XML文件中设置导入和导出的。

另一种选择是使用Autofac进行注册,然后使用其MEF integration向MEF提供autofac组件。

答案 1 :(得分:1)

我不是百分百肯定,但我不认为可以用MEF做。但是,用于提供类似行为的一种模式是工厂/提供者模式。

interface IData {} 

interface IDataProvider {
  IData Data { get; set; }
}

[Export(IDataProvider)]
class DataProvider : IDataProvider {
  public IData { get; set; }
}

您可以使用此模式将IData的实现动态更新为您要使用的值。