2008-09-20 8 views

Respuesta

53

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 interfaz publicada (contrato) biblioteca .

Otro problema de espacio MEF direcciones que es diferente de los sospechosos habituales de IoC, y uno de los puntos fuertes de MEF, es la [extensión] descubrimiento. Tiene una gran cantidad de mecanismos de descubrimiento extensibles que operan en metadatos que puede asociar con extensiones. Desde el sitio MEF CodePlex:

"MEF permite extensiones de marcado con metadatos additonal que facilita rica consulta y filtrando"

combinado con una capacidad de retrasar la carga etiquetada extensiones, siendo capaz de interrogar metadatos extensión antes para la carga abre la puerta a una gran cantidad de escenarios interesantes y permite sustancialmente capacidades 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 total sobre los detalles de esas transformaciones. 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 del complemento, algo que lo diferencia mucho de otros contenedores 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.

+14

que tenga una muy distinta elección de las palabras. –

26

Los contenedores IoC se centran en esas cosas que usted conoce, 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.