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