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

CVe*_*tex 67 .net dependency-injection

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

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

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

Tom*_*kel 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不支持剩余的两个维度.

  • 除了具有基于约定的配置模型之外,生命周期管理现在在nuget 4.5/4.0中的MEF 2.0中得到显着改善.虽然MEF Contrib确实有AOP/Interception的扩展,但拦截并不存在. (3认同)