En esta oportunidad quiero compartirles sobre los contenedores de inversión de control (IoC Containers). Uno de los puntos a tomar en cuenta durante el desarrollo de sistemas es reducir el acoplamiento entre componentes, mientras mas bajo sea éste, menos esfuerzo realizamos durante el proceso de integración de los mismos, además estar preparados ante cualquier cambio que puedan surgir. Uno de los principios SOLID que nos ayudan para lograr este objetivo es el Principio de Inversión de Dependencia y las técnicas de Inyección de Dependencias, acompañados con los magníficos contenedores de inversión de control.
Un Contenedor de Inversión de Control (IoC Container) es un componente especializado en la creación de instancias de objetos, así como en la gestión del ciclo de vida éstas, en términos simples es una clase encargada de suministrarnos las instancias que necesitemos en nuestra aplicación y olvidar sus dependencias hacia otras clases. ¡Fabuloso!. Nos olvidamos de los molestos «new» cada vez que necesitemos una instancia de alguna clase, por supuesto requiere una configuración inicial donde registramos todas las clases.
Los contenedores de inversión de control se apoyan en dos conceptos muy importantes Inyección de Dependencia e Inversión de Control, muchos creen que son lo mismo pero son dos conceptos diferentes que comparten cosas en común.
Inyección de Dependencia (DI)
- Es un patrón de diseño que consiste en hacer que nuestras piezas de Software sean independientes.
- Se refiere a la forma de como implementar el patrón IoC.
- Se refiere a la forma de como los objetos consumidores reciben sus dependencias
Inversión de Control (IoC)
- Patrón de diseño que coadyuva al bajo acoplamiento entre componentes de un sistema o una aplicación.
- Los objetos consumidores no crean los objectos ayudantes, de los que depende. Estos son creados por un contenedor (Ejem: Unity Conteiner), que inyectará las dependencias. Útil para implementar un sistema enfocado a un diseño orientado a componentes.
Ahora vamos a ver uno de los contenedores mas usados dentro de la plataforma .NET, si aún no lo conoces es momento de hacerlo e iniciar el desarrollo de tus proyectos usando esta herramienta.
Unity (By Microsoft)
Éste IoC Container fue creado por Microsoft Pattern & Practices.
Unity tiene licencia MS-PL Licence. Fue escrito por Chris Tavares y su “Kernel” está basado en ObjectBuilder.
Aquí puedes ver como puedes iniciar la configuración del contenedor y registrar las clases.
public class Bootstrapper | |
{ | |
private IUnityContainer unityContainer; | |
public Bootstrapper() | |
{ | |
unityContainer = new UnityContainer(); | |
unityContainer.RegisterType<IPasswordCipher, Pbkdf2PasswordCipher>(new ContainerControlledLifetimeManager()); | |
unityContainer.RegisterType<IPasswordCipherFactory, Pbkdf2PasswordCipherFactory>(new ContainerControlledLifetimeManager()); | |
var cipherPassword = unityContainer.Resolve<IPasswordCipher>(); | |
var cipherPasswordFactory = unityContainer.Resolve<IPasswordCipherFactory>(); | |
// Usamos los objetos instanciados | |
var cifrado = cipherPassword.Encryp("password"); | |
} | |
} |
Si bien este es un ejemplo sencillo, mas adelante estaré compartiendo las distintas configuraciones que puedes realizar, inyectar constructor y la configuración de los tiempos de vidas de los objetos.
Espero sea de utilidad y puedas aplicarlos en tus proyectos.
Saludos y hasta pronto.