MEF(Managed Extensibility Framework)解决了哪些现有IoC/DI容器无法解决的问题?
3 回答
MEF 的主要目的是可扩展性;当应用程序的作者和插件(扩展)的作者不同并且除了发布的接口(合同)库之外彼此没有特定的知识时,用作“插件”框架。
另一个与通常的 IoC 嫌疑人不同的 MEF 解决的问题空间,也是 MEF 的优势之一,是 [扩展] 发现。它有很多很好的可扩展发现机制,可以对可以与扩展关联的元数据进行操作。从 MEF CodePlex 网站:
“MEF 允许使用附加元数据标记扩展,这有助于丰富的查询和过滤”
结合延迟加载标记扩展的能力,能够在加载之前询问扩展元数据为一系列有趣的场景打开了大门,并大大启用了诸如 [插件] 版本控制之类的功能。
MEF 还具有“合同适配器”,它允许对扩展进行“适应”或“转换”(从 type > 到 type),并完全控制这些转换的细节。合同适配器开辟了另一个与“发现”的含义和含义相关的创造性前沿。
同样,MEF 的“意图”非常关注匿名插件的可扩展性,这与其他 IoC 容器有很大不同。因此,虽然 MEF 可用于组合,但与其他 IoC 相比,这只是其功能的一小部分,我怀疑未来我们会看到很多乱伦的相互作用。
IoC 容器专注于你知道的那些事情,即我知道我将在单元测试中使用一个记录器,并在我的应用程序中使用不同的记录器。MEF 专注于那些你不关注的事情,我的系统中可能会出现 1 到 n 个记录器。
Scott Hanselman 和我在最近的 hanselminutes 中更详细地讨论了这个主题。