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