IOC: Registro por Convención de Nombres

En mis últimos proyectos me he encontrado con que a medida que el proyecto crecía, acabábamos teniendo ficheros de configuración de dependencias enormesTanto si usábamos el contenedor de Unity o Ninject, necesitábamos registrar línea por línea cada una de las interfaces con la clase correspondiente que la implementaba:

BusinessServices

Según crece la aplicación, se van añadiendo más y más servicios, repositorios, utilidades, etc. Además, cuanto más crece el método que registra estos servicios, más fácil es que nos olvidemos de corregir cualquier cambio al añadir nuevas dependencias y acabamos encontrando los errores en tiempo de ejecución.

Convención de nombres

Convencion_nombresEn la mayoría de los casos, el nombre de dicha clase solía coincidir con el nombre de su interfaz sin la I inicial. Es decir, seguíamos la convención de nombres, pero no aprovechamos las características existentes de las librerías.

Tanto Unity como Ninject nos permiten escanear nuestros ensamblados y resolver automáticamente las dependencias usando la convención de nombres anterior, o incluso usar una convención propia para todo el proyecto o para un ensamblado concreto. Al añadir una nueva interfaz y su implementación, nos permite además que no necesitemos configurar nada salvo en los casos particulares en que no se respete la convención o queramos, por ejemplo, registrar el servicio como singleton.

Unity

Unity a partir de su versión 3.0, nos facilita la tarea de registrar las clases de nuestros ensamblados usando la convención de nombres. Por ejemplo:

BusinessServices_2

Este código escaneará todos los ensamblados cargados en el proyecto en busca de interfaces y sus implementaciones para registrarlas en el contenedor de Unity. Además de este escaneo, se puede configurar qué ensamblados escanear, como mapear las interfaces o especificar el ciclo de vida en el contenedor. Leer más acerca de Registration by Convention.

Ninject

Para la librería Ninject existe también una extensión llamada ninject.extensions.conventions que permite registrar desde un ensamblado al igual que Unity:

Ninject

Al igual que con Unity, esta extensión tiene diversas opciones para realizar el escaneo, pudiendo añadir particularidades o violaciones de la convención.

Versiones anteriores de Unity

Para versiones anteriores de Unity, existen librerías como UnityConfiguration para realizar el escaneo con convención de nombres. Un ejemplo de esta librería sería:

BusinessServices_3

Al igual que en los casos anteriores, UnityConfiguration posee diversas opciones que permiten afinar como realizar el escaneo en nuestro proyecto.

Independientemente de la librería que utilicemos, utilizar la convención de nombres quita mucho trabajo a los desarrolladores y ayuda a la mantenibilidad del proyecto. Los ficheros de configuración podrán dejar de estar sobrecargados y es un buen punto de partida para paradigmas como “Convención sobre Configuración”.

Descubre cómo Sogeti puede ayudarte a implantar proyectos de Desarrollo de TI bajo tecnología Microsoft en tu compañía.

Más información:

JavierSanzNietoJavier Sanz

.NET Architect | Soluciones Microsoft | SOGETI ESPAÑA

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s