2008-10-19 8 views
66

Se ha dicho en la blogósfera y por los mismos Microsoft que MEF no es otro contenedor de IoC.¿Por qué exactamente no es MEF un contenedor DI/IoC?

OK ... 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?

+2

Al menos podrías dejarme mantener un upvote para el enlace a la entrevista código de pastoreo :) – Kev

+0

Claro keV. Perdón por eso, pero la respuesta de los bloques Glen en hanselminutes fue mucho más detallada. La entrevista que publicaste fue buena, pero me dejó más preguntas que respuestas. – CVertex

+1

Cubrimos esto en un episodio reciente de hanselminutes. http://www.hanselminutes.com/default.aspx?showID=166 –

Respuesta

8

En mi mundo DI se basa en tres dimensiones, composición de objetos, gestión de por 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.

+3

La administración de por vida ahora se ha mejorado significativamente en MEF 2.0 en 4.5/4.0 en nuget, además de tener un modelo de configuración basado en convenciones. La interceptación no está allí, aunque MEF Contrib tiene una extensión para AOP/Interceptación. –

9

MEF tiene potencial, sino como un contenedor de DI, le falta:

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

Esas cosas son bastante importantes.

el estilo de vida que le falta:

  1. por gráfico
  2. solicitud web Contexto
  3. Tema Contexto
  4. contexto de sesión
  5. agrupado
  6. Scoped
  7. referencia personalizada

Referencias: - el libro de Mark Seemann "inyección de dependencias en .NET"