dependency injection - MEF(Managed Extensibility Framework) vs IoC/DI
dependency-injection inversion-of-control (3)
¿Qué problemas resuelve MEF (Managed Extensibility Framework) que no pueden ser resueltos por los contenedores IoC / DI existentes?
El propósito principal de MEF es la extensibilidad; para que sirva como un marco ''plug-in'' para cuando el autor de la aplicación y el autor del complemento ( extensión ) son diferentes y no tienen un conocimiento particular entre ellos más allá de una biblioteca de interfaz ( contrato ) publicada.
Otro problema que el MEF enfrenta es diferente de los sospechosos habituales de IoC, y uno de los puntos fuertes de MEF es el descubrimiento de [extensión]. Tiene una gran cantidad de mecanismos de descubrimiento extensibles que operan en metadatos que puede asociar con extensiones. Desde el sitio MEP CodePlex:
"MEF permite extensiones de etiquetado con metadatos adicionales que facilitan consultas y filtros enriquecidos"
Combinado con la capacidad de cargar de forma tardía las extensiones etiquetadas, el poder interrogar los metadatos de la extensión antes de la carga abre la puerta a una gran cantidad de escenarios interesantes y permite capacidades sustanciales, como el control de versiones [plug-in].
MEF también tiene ''Adaptadores de contrato'' que permiten que las extensiones se ''adapten'' o ''transformen'' ( de tipo> a tipo ) con control completo sobre los detalles de esas transformadas. Los adaptadores de contrato abren otro frente creativo en relación con lo que significa ''descubrimiento'' y lo que implica.
Una vez más, la "intención" de los MEF está muy centrada en la extensibilidad anónima de los complementos, algo que lo diferencia mucho de otros contenedores de IoC. Entonces, aunque MEF se puede usar para la composición, eso es simplemente una pequeña intersección de sus capacidades en relación con otros IoC, con lo que sospecho que veremos una gran interacción incestuosa en el futuro.
Los contenedores de IoC se centran en esas cosas que sabes, es decir, sé que usaré un registrador en una prueba de unidad y un registrador diferente en mi aplicación. MEF se enfoca en las cosas que usted no hace, hay de 1 a n loggers que pueden aparecer en mi sistema.
Scott Hanselman y yo cubrimos este tema con más detalle en los últimos minutos de hansel.