【问题标题】:How to export a type in MEF as if the Export Attribute had been applied to that type?如何在 MEF 中导出类型,就好像导出属性已应用于该类型一样?
【发布时间】:2010-11-17 22:02:23
【问题描述】:

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

有没有简单的方法来做到这一点?

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

【问题讨论】:

    标签: .net mef composition system.componentmodel


    【解决方案1】:

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

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

    MEF Contrib Fluent Definition Provider 就是这样一个实现,它允许您通过方法调用注册导入和导出。

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

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

    【讨论】:

    • 感谢您提供这份简洁的选项列表。
    • @WimCoenen 我认为对于 MEF 2,您自己的文章可能会更好:mindinthewater.blogspot.nl/2011/03/…
    • @Zidad:感谢您的评论,我已经更新了这个(旧)答案。
    【解决方案2】:

    我不能 100% 确定,但我认为这与 MEF 无关。一种用于提供类似行为的模式是工厂/提供者模式。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 2012-01-07
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 2012-09-03
      • 2014-06-23
      • 2011-02-09
      相关资源
      最近更新 更多