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

据博客和微软自己说,MEF不是另一个IoC容器。

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

为什么MEF不是像Unity或Castle Windsor这样的IoC容器?

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

  1. 代码作为configuration
  2. 自动注册
  3. XMLconfiguration(对我不重要)
  4. 定制的生命周期
  5. 截击

这些事情是非常重要的。

对于生活方式,它缺乏:

  1. 按图表
  2. Web请求上下文
  3. 线程上下文
  4. 会话上下文
  5. 汇集
  6. 作用域
  7. 自定义参考

参考文献: – Mark Seemann的书“.NET中的dependency injection”

在我的世界,DI基于三个维度:对象构成,生命周期pipe理和拦截。 这是其他完整的DI容器,如Unity,Castle Windsor和Ninject所促成的。 MEF只支持一个维度,即对象组合。 这样做很好,但其余的两个维度在MEF中不被支持。