Definiciones
La inversión del control es un paradigma de diseño con el objetivo de reducir el conocimiento de implementaciones concretas del código de marco de la aplicación y dar más control a los componentes específicos del dominio de su aplicación. En un sistema tradicional diseñado de arriba hacia abajo, el flujo lógico de la aplicación y la conciencia de dependencia fluye desde los componentes superiores, los diseñados primero, hasta los diseñados por último. Como tal, la inversión de control es una inversión casi literal de la conciencia de control y dependencia en una aplicación.
La inyección de dependencia es un patrón utilizado para crear instancias de clases en las que otras clases dependen sin saber en el momento de la compilación qué implementación se utilizará para proporcionar esa funcionalidad.
Trabajando juntos
La inversión del control puede utilizar la inyección de dependencia porque se necesita un mecanismo para crear los componentes que proporcionan la funcionalidad específica. Existen otras opciones y se utilizan, por ejemplo, activadores, métodos de fábrica, etc., pero los marcos no necesitan hacer referencia a esas clases de utilidad cuando las clases marco pueden aceptar las dependencias que necesitan.
Ejemplos
Un ejemplo de estos conceptos en el trabajo es el marco de plug-in en Reflector . Los complementos tienen un gran control del sistema a pesar de que la aplicación no sabía nada sobre los complementos en el momento de la compilación. Se llama a un único método en cada uno de esos complementos, Inicializar si la memoria sirve, que pasa el control al complemento. El marco no sabe lo que harán, simplemente les permite hacerlo. El control se ha tomado de la aplicación principal y se le ha dado al componente que realiza el trabajo específico; Inversión de control.
El marco de la aplicación permite el acceso a su funcionalidad a través de una variedad de proveedores de servicios. Un complemento recibe referencias a los proveedores de servicios cuando se crea. Estas dependencias permiten que el complemento agregue sus propios elementos de menú, cambie la forma en que se muestran los archivos, muestre su propia información en los paneles apropiados, etc. Dado que las dependencias se pasan por interfaz, las implementaciones pueden cambiar y los cambios no interrumpirán código siempre que el contrato permanezca intacto.
En ese momento, se utilizó un método de fábrica para crear los complementos utilizando información de configuración, reflexión y el objeto Activador (al menos en .NET). Hoy en día, existen herramientas, MEF para una, que permiten una gama más amplia de opciones al inyectar dependencias, incluida la capacidad de un marco de aplicación para aceptar una lista de complementos como dependencia.
Resumen
Si bien estos conceptos se pueden usar y proporcionar beneficios de forma independiente, juntos permiten escribir código mucho más flexible, reutilizable y comprobable. Como tales, son conceptos importantes en el diseño de soluciones orientadas a objetos.