unity ioc container dependency-injection inversion-of-control mef ioc-container structuremap

dependency-injection - ioc - unity container



Diferencia entre los contenedores MEF y IoC(como Unity, Autofac, SMap, Ninject, Windsor.Spring.net, etc.) (2)

Finalmente, lo que he concluido sobre el contenedor MEF vs IoC es el siguiente:

Se prefiere usar MEF cuando se tiene que lidiar con tipos desconocidos o una arquitectura basada en complementos.

Los contenedores IoC se prefieren para ser usados ​​con tipos conocidos.

Además, MEF es una solución arquitectónica para la inyección de dependencias.

Considerando que, los contenedores IoC son soluciones de nivel de código para la inyección de dependencia.

Los contenedores IoC son simplemente técnicas de inyección de dependencia que completan la instancia de una clase y si el constructor de esas clases requiere objetos de otras clases, entonces IoC también inyecta los objetos requeridos. Pero MEF hace más que solo inyección de dependencia. Aunque, MEF también utiliza un enfoque basado en IoC para la inyección de dependencia, pero MEF hace muchas otras cosas además de la inyección de dependencia.

MEF tiene dos componentes:

  1. Catálogo: Es responsable de descubrir extensión.

  2. Contenedor: proporciona la capacidad de cargar una extensión a una aplicación en ejecución

MEF es más que simples técnicas de inyección de dependencia. Se utiliza cuando necesitamos una arquitectura basada en complementos para nuestra aplicación, pero al mismo tiempo MEF utiliza un enfoque basado en IoC para la inyección de dependencia.

Estoy esperando que más personas comenten sobre esto.

He estado buscando acerca de la inyección de dependencia y leí algunos artículos. Pero todavía no puedo encontrar la diferencia entre MEF y otros IoC. Entonces, mi pregunta es esta: ¿en qué situación prefiero usar un contenedor MEF o IoC?

¿Por qué es bueno usar MEF con PRISM para (WPF y Silverlight) o para aplicaciones de escritorio?

Mientras que en la aplicación web la gente usa contenedores IoC.

Entonces, ¿cuál es el criterio para decidir qué técnica de dependencia debo usar?

He revisado el artículo http://devlicio.us/blogs/casey/archive/2009/12/18/what-is-the-difference-between-an-ioc-container-and-mef.aspx , pero No se pudo determinar nada.


IoC es una estrategia de diseño arquitectónico, y MEF es una implementación de la inyección de dependencia de patrón de diseño. La inyección de dependencia (DI) es a menudo la estrategia de implementación de IoC. A menudo, se utiliza el término contenedor IoC, lo que sugiere que IoC es la técnica.

No, es lo contrario. IoC es un concepto amplio y DI es el patrón de diseño para implementar el núcleo de IoC. MEF es alguna forma de DI, pero no tiene todas las características fundamentales de IoC.

MEF utiliza la composición para averiguar las dependencias que necesita resolver. Eso es muy parecido a muchos otros contenedores IoC, por ejemplo, Pico y Spring . Pero se detiene allí. No vi ninguna gestión de ciclo de vida ni configuración de agrupación. Considero que los dos últimos son una parte fundamental de IoC (no de DI), porque el rendimiento de la persona que llama no debería verse afectado por el consumo de memoria utilizado por la persona que llama.

El principio de IoC es un servicio para la persona que llama y la persona que llama, al unirlos de manera flexible. De esa forma ambas funcionalidades pueden funcionar optimizadas. MEF podría tener el problema de que hay problemas con la optimización. Por ejemplo, cuando recibe una llamada del menú a una base de datos, en algún momento se realizará una llamada a la base de datos. Siempre es mejor utilizar la agrupación para eso. MEF no es capaz de hacer eso.

El tipo de aplicación debe ser independiente de la elección para un patrón de diseño. No hay una gran diferencia entre un escritorio o una aplicación web. Ambas son interfaces de usuario, y ambas deberían poder usar MEF y IoC. Si la funcionalidad es sencilla y no necesita cruzar los límites de optimización (como las llamadas a la base de datos), entonces MEF es la primera opción, porque es un marco que está presente cuando se usa .NET 4. Entonces podría ser útil, pero si una llamada cruza un límite de optimización (como el análisis o la carga de un archivo), luego el uso de un contenedor IoC es más fructífero para el rendimiento y el mantenimiento.

Información que utilicé: