c# - net - unity ioc
¿Dónde está exactamente la diferencia entre IoC y DI (2)
Posible duplicado:
Inversión de Control <Inyección de Dependencia
Siempre leo IoC (Inversion of Control) y DI (Dependency Injection) en el mismo contexto. ¿Cuál es exactamente la diferencia entre IoC y DI? ¿Cómo se diferencia IoC de DI?
En el uso común, los términos se han convertido en algo sinónimo. La idea original de IoC, Inversión de control, estaba muy relacionada con el "Principio de Hollywood:" No nos llames, te llamaremos .
En aplicaciones tradicionales, los desarrolladores escribirían código de negocio y código de marco. El código de negocio luego llamaría al código marco para realizar tareas. Bajo un modelo de IoC, usted "invierte" ese modelo y crea un marco que acepta módulos de negocios y los llama para realizar tareas. Este principio se exhibe en varios marcos de desarrollo, incluidos el antiguo Smart Client Software Factory y el Prism más nuevo (o aplicaciones compuestas para WPF / Silverlight) . En estos modelos, los módulos de interfaz de usuario se registran en un contenedor IoC y se cargan según sea necesario en función de la configuración y las acciones del usuario. Si bien son potentes, estos modelos también tienden a tener una curva de aprendizaje muy pronunciada.
La Inyección de Dependencia es una técnica (difícil de llamar, en realidad, un patrón) de eliminar las dependencias internas de las implementaciones al permitir que una persona que llama externamente inyecte objetos dependientes en la clase / método. Los marcos de IoC usan la inyección de dependencia para proporcionar módulos de usuario y otro código dependiente a rutinas de marco que "pegan todo". La inyección de dependencia es utilizada en gran medida por los frameworks IoC porque ese es el mecanismo que les permite "Call You".
Los Contenedores de IoC, como Castle Windsor y Structure Map, ayudan con la inyección de dependencias al proporcionar instancias automáticas y administración del ciclo de vida de las clases que registra, incluida la creación de instancias automáticas y la inyección de los parámetros requeridos por las clases registradas. Todo esto facilita el uso de la inyección de dependencia, pero no es obligatorio.
La Inyección de Dependencia es un mecanismo de flexibilidad que maximiza la dependencia de las interfaces al tiempo que minimiza la dependencia en la implementación específica. En consecuencia, los sistemas que usan inyección de dependencia pueden admitir clases de implementación "conectables" que se pueden usar dependiendo de las circunstancias. Un beneficio muy grande de esta "capacidad de conexión" es que hace que la creación de pruebas unitarias sea mucho más fácil. Puede simular un objeto a la interfaz necesaria y luego inyectarlo en su objeto de prueba.
Entonces, IoC es realmente el principio más amplio y DI es una técnica fundamental. Los sistemas IoC (Principio de Hollywood) tienden a ser bastante complejos, pueden ser difíciles de entender y, por lo tanto, tienen curvas de aprendizaje abruptas. DI, por otro lado, es una buena práctica para los desarrolladores de todos los días. Tiendo a preferir lo comprensible y claro a lo fresco, pero complejo.
IoC es la capacidad de variar la implementación de un contrato.
DI es la capacidad de suministrar la implementación.