¿Por qué exactamente no es MEF un contenedor DI / IoC?

Se ha dicho en la blogósfera y por los mismos Microsoft que MEF no es otro contenedor IoC.

¿Está bien, pero por qué? Me parece lo mismo. Tal vez no sea tan bueno como Unity o Castle Windsor , pero todavía se ajusta a la definición, ¿no?

¿Por qué MEF no es un contenedor de IoC como Unity o Castle Windsor?

MEF tiene potencial , pero como contenedor DI, carece de:

  1. Código como configuración
  2. Registro automático
  3. Configuración XML (no tan importante para mí)
  4. Tiempos de vida personalizados
  5. Interceptación

Esas cosas son bastante importantes.

Para el estilo de vida le falta:

  1. Por gráfico
  2. Contexto de solicitud web
  3. Contexto del hilo
  4. Contexto de la sesión
  5. Agrupado
  6. Alcance
  7. Referencia personalizada

Referencias: – El libro de Mark Seemann “Dependency Injection in .NET”

En mi mundo, DI se basa en tres dimensiones, composición de objetos, gestión de vida e intercepción. Esto es lo que facilita otros contenedores DI completos, como Unity, Castle Windsor y Ninject. MEF solo admite una dimensión, Composición del objeto. Está haciendo esto bastante bien, pero las dos dimensiones restantes no son compatibles con MEF.