DI

Introducción a la inyección de dependencias mediante Unity


English version here

Tras una pequeña introducción a la inversión de control y a la inyección de dependencias, veremos cómo se comportan los contenedores DI en una aplicación práctica. Para ello hablaremos de Unity, desarrollado por Microsoft y perteneciente al paquete Enterprise Library.

Unity es, por tanto, un Framework de inyección de dependencias o DI Container. Puede ser descargado desde Codeplex o utilizando NuGet dentro de Visual Studio, método este último que utilizaremos en nuestro ejemplo.

Comenzaremos creando un nuevo proyecto de consola al que llamaremos, por ejemplo, UnityExample.

A continuación haremos uso de NuGet para añadir nuestra referencia a Unity. Será tan sencillo como hacer click derecho sobre las referencias del proyecto y seleccionar la opción Manage NuGet Packages…

(más…)

Inversión de Control e Inyección de Dependencias


English version here

Los conceptos de Inversión de Control e Inyección de Dependencias no son nuevos, sino que se remontan hasta finales de la década de los 80. Sin embargo, estos conceptos han comenzado a popularizarse debido a la estrecha relación que mantienen con la aparición de Frameworks como Spring en Java o Unity en .NET.

Inversión de Control

El concepto de Inversión de Control fue acuñado originalmente por Martin Fowler, diseñador del patrón MVVM (Model View View-Model). Fowler definió el concepto de forma informal denominándolo como el Principio de Hollywood, en el que, tras una audición, se le decía al actor la famosa frase de No nos llames, nosotros te llamaremos.

El principio establece una diferenciación entre el concepto de biblioteca y framework, definiendo el primero como un simple conjunto de clases, métodos y funciones que son invocadas por el flujo del programa y que posteriormente devuelven el control a éste (control normal) y el segundo como un diseño más abstracto y elaborado que se encargará, en algún momento, de invocar el código que el programador se encargue de codificar (inversión de control).

El ejemplo expuesto por Fowler no puede ser más sencillo: un control normal sería un simple programa secuencial de consola en el que el programa va solicitando datos al usuario y realizando operaciones (cálculos, visualización por pantalla) al recibir las respuestas. Un programa que aplica una inversión de control, sin embargo, se podría representar como una ventana compuesta por cajas de texto, etiquetas y botones. El Framework, en este caso, expondría un bucle de espera que detectaría la emisión de eventos, como la pulsación de un botón, momento en el cual se ejecutaría el código de usuario. El Framework invocará nuestro código en lugar de realizar la operación contraria.

(más…)