2010-11-11 6 views
5

Tengo una pregunta relativamente básica, pero más que nada solo necesito cierta claridad, he estado utilizando Prism (Guía de aplicaciones compuestas) para crear una aplicación de escritorio WPF MVVM en C#, este bit soy todo claro (o al menos eso creía) junto con la arquitectura basada en IoC y Módulo, etc. Al mismo tiempo, comencé a usar MEF y me di cuenta de que hay una especie de área gris entre los dos (he encontrado y leído varios artículos/blogs en hosting Extensiones MEF en contenedores IoC y similaresDiferencias entre MEF, EntLib y Prism

Sin embargo .... recientemente comencé a buscar en Enterprise Library 5 y esto es lo que me llevó a la confusión. ¿Dónde se ajustan todos? DI con una arquitectura basada en módulos ... EntLib usa Di con una arquitectura de tipo Application Block ... y ME F no usa DI en absoluto? ¿Significa esto que EntLib y Prism son métodos arquitectónicos completamente separados o que uno es un subconjunto del otro? También podría MEF ser utilizado con cualquiera/ambos?

Cualquier explicación sería muy bienvenida.

Muchas gracias

Respuesta

10

Yo, también, estaba desconcertado por la diferencia entre la COI y el MEF. La forma más sencilla que encontré para describirlos fue esta:

MEF es para descubrir e instanciar algo que no conoces.

IoC es para solicitar algo que usted sabe.

Un poco de contexto. MEF instanciará siempre la importación que solicite al menos una vez. No eres capaz de crearlo tú mismo y ponerlo en el catálogo listo para ser utilizado. MEF es responsable de crear y satisfacer las importaciones. Las DLL cargadas dinámicamente, donde no se sabe qué DLL están llegando, es un buen ejemplo.

IoC, por el contrario, solicita una implementación de la biblioteca actual y se le proporciona una. Pero también es responsable de garantizar que exista una implementación.

IoC es para inyección de dependencia. MEF es para extensibilidad.

+0

Hola Josh, muchas gracias por su respuesta, esa es una buena manera de describirlos y pensar en ellos. Encontré un excelente video en Channel 9 de Mike Taulty, basado en Silverlight pero igual de relevante para WPF: http://channel9.msdn.com/blogs/matthijs/silverlight-4-a-guided-tour-of-the -managed-extensibility-framework-mef – jameschinnock

+0

IOC, cuando se hace de forma remota con DI, expone las interfaces que le permiten "conocer" la funcionalidad pero no la clase que la maneja. Este es simplemente el diseño polimórfico en el trabajo, pero agrega complexixity MEF es único en el sentido de que generará DLL sobre la marcha mediante el reflejo. Por lo tanto, permite intercambiar archivos DLL sin alterar el código fuente de otras bases de códigos.Así que estoy completamente de acuerdo con Josh en este componente, sin embargo, no creo que sea un enfoque razonable para la mayoría de las personas. http://msdn.microsoft.com/en-us/library/ff648478.aspx http://msdn.microsoft.com/en-us/library/dd460648%28v=vs.110%29.aspx –

+0

MEF => Application Plug-ins – orad

3

Tome un vistazo a estos 2 mensajes:

En cuanto a Enterprise Library, en v5.0 lo hemos hecho contenedor agnóstica. A pesar de que Enterprise Library se envía con el contenedor Unity listo para usar, está diseñado para funcionar con cualquier contenedor de su elección o MEF. Debe proporcionar un configurador adecuado (consulte la información sobre los configuradores al final de este summary)

+1

Hola Grigori, gracias por los enlaces, ¡eso es genial! ¿Tengo razón al pensar que las principales diferencias de alto nivel entre Prism y EntLib son realmente una forma diferente de arquitectura (¿existe esa palabra? :-)) programas? Entonces, Prsim usa los Módulos, por lo tanto, puede ser compatible con WPF Ui dev, mientras que EntLib usa Bloques de aplicaciones, ¿quizás más trabajo relacionado con el servidor? ¿Cuál sería un buen ejemplo de cuándo usar Entlib sobre Prism? Muchas gracias de nuevo, muy apreciado. – jameschinnock

+0

James, estos tienen diferentes objetivos en mente. Prism es específico para la arquitectura de interfaces de usuario compuestas (en WPF o Silverlight), mientras que EntLib es una biblioteca de propósito general (no específica de capas) que aborda problemas comunes comunes tales como registro, validación, gestión de excepciones, etc. –

+0

Esta diferencia sería útil destacado en alguna parte, methink – nicolas

Cuestiones relacionadas