MEF为什么不是DI / IoC容器?


67

有人在博客圈和Microsoft自己说过,MEF并不是另一个IoC容器。

好...但是为什么呢?对我来说似乎一样。也许不如Unity或Castle Windsor好,但仍然符合定义,不是吗?

MEF为什么没有Unity或Castle Windsor这样的IoC容器?


1
我们在最近的《 hanselminutes》一集中对此进行了介绍。hanselminutes.com/default.aspx?showID=166
格伦街区

2
您至少可以让我保持对牧群代码采访链接的支持:)
Kev

当然可以。抱歉,但格伦在《汉斯·分钟》中的回答更为详尽。您发布的访谈很好,但是给我留下的问题多于答案。
CVertex

Answers:


10

MEF具有潜力,但作为DI容器,它缺乏:

  1. 代码配置
  2. 自动注册
  3. XML配置(对我而言并不那么重要)
  4. 自定义寿命
  5. 拦截

这些事情很重要。

对于生活方式,它缺乏:

  1. 每个图
  2. Web请求上下文
  3. 线程上下文
  4. 会话上下文
  5. 汇集
  6. 范围
  7. 定制参考

参考文献:-Mark Seemann的书“ .NET中的依赖注入”


8

在我的世界中,DI基于三个维度,即对象组成,生命周期管理和拦截。这是其他成熟的DI容器(例如Unity,Castle Windsor和Ninject)所促进的。MEF仅支持一个维度,即“对象组合”。它做得很好,但是MEF不支持其余两个维度。


3
除了具有基于约定的配置模型外,现在在nuget上的4.5 / 4.0中的MEF 2.0中,生命周期管理得到了显着改善。尽管MEF Contrib确实扩展了AOP /拦截功能,但拦截功能并不存在。
Glenn Block
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.