MEF(Managed Extensibility Framework)解决了现有IoC / DI容器无法解决的问题?

有帮助吗?

解决方案

MEF的主要目的是可扩展性;当应用程序的作者和插件的作者(扩展)不同并且在已发布的接口之外没有彼此特别的知识时,作为“插件”框架( 合同)库。

另一个问题空间MEF解决了与通常的IoC嫌疑人不同的问题,也是MEF的优势之一,是[扩展]发现。它有许多可扩展的发现机制,可以对可以与扩展关联的元数据进行操作。来自MEF CodePlex网站:

" MEF允许使用附加元数据标记扩展,这有助于丰富的查询和过滤“

结合延迟加载标记扩展的能力,能够在加载之前查询扩展元数据打开通向一系列有趣场景的大门,并实质上支持[插件]等功能版本。

MEF还有“合同适配器”,允许扩展“适应”或“转换”(从类型>到类型),完全控制这些转换的细节。合同适配器开辟了另一个创造性的前沿,相对于“发现”意味着什么和需要。

同样,MEF的“意图”主要关注匿名插件的可扩展性,这与其他IoC容器非常不同。因此虽然MEF可以用于构图,但这仅仅是其相对于其他IoC的能力的一个小交集,我怀疑我们将会看到很多乱伦的相互作用。

其他提示

IoC容器专注于你知道的事情,即我知道我将在单元测试中使用一个记录器,在我的应用程序中使用不同的记录器。 MEF专注于那些你没有的东西,我的系统中可能会有1到n个记录器。

Scott Hanselman和我在最近的hanselminutes中更详细地讨论了这个话题。

http://www.hanselminutes.com/default.aspx?showID=166

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top