繁体   English   中英

如何在MEF和任何IoC容器之间做出决定?

[英]How to decide between MEF and any IoC container?

在哪种情况下我们应该使用哪种? 如何决定选择哪一个? 在哪种情况下我们会选择同时使用它们?

我以前曾使用Unity 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM