[英]How to decide between MEF and any IoC container?
棘手的问题 - 因为这两个确实在某种程度上重叠。
我会这样说:
使用任何有用的IoC,如果你主要关心依赖注入,以便解耦你的组件,例如能够注入模拟而不是(用于测试)
使用MEF特别是如果你更可扩展,例如能够“从导出某个接口的目录加载所有程序集”,并且如果你需要可扩展并为第三方开放(如Visual Studio:提供公共) API,以便其他人可以为您的应用编写扩展程序)。 这是MEF真正闪耀的地方
对于MEF和Unity,还有MEF和Unity Integration Layer将两种工具的优势结合在一起。
我还建议你查看Ayende的优秀博客文章 ,了解MEF与IoC的区别。
如果您有第三方编写插件,实现接口并且您希望能够在不破坏第3方插件的情况下对您的界面进行版本控制而无法重新编译,MEF会闪耀。 换句话说,MEF比原始IoC更复杂。
所以我会说IoC如果所有内容都编译为同一个构建系统的一部分,那么MEF如果你需要处理加载项,你就无法自己重新编译。
Glen Block(MEF的前产品经理)在他的博客上已经很好地介绍了这一点:
我听到了一个很好的解释(向作者道歉,我已经忘记了它是谁):在很高的层次上,当你想要一个给定界面的东西时,IoC是好的,当你想要所有的东西时,MEF是好的来自给定的界面。
例如,在IoC中,您希望为接口返回特定的单个具体类:
For<ICarFactory>().Use<CarFactory>();
每当你想使用ICanFactory
你都会得到一个CarFactory
。
MEF很适合说给我所有的汽车工厂:
CheapCarFactory : ICarFactory
FamilyCarFactory : ICarFactory
LuxuryCarFactory : ICarFactory
等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.