ASP.NET 5 Startup e inyección de dependencias

Nota: Este post ha sido realizado con versiones previas de ASP.NET 5 y de Visual Studio 2015, lo aquí escrito puede variar con la version final de la plataforma.

La verdad es que tenía pensado publicar un post acerca de como funciona el Startup de ASP.NET 5, pero el buen amigo de Jose Maria Aguilar me adelantó por la izquierda con este buen post que cubre el tema perfectamente. Por ello me he decidido a completarlo un poco hablando de como se gestiona el trabajo con las dependencias, sobre lo cual, en si mismo, tendremos que hacer un post próximamente.

Además del método Configure que nos explicaba Aguilar, el proceso de carga de nuestras clases Startup, StartupLoadertambién hace la búsqueda de un método llamado ConfigureServices, o ConfigureServices[Environment], con el fin de que podamos en el establecer dentro del contenedor por defecto las dependencias que querramos.

Nota: Si está interesado en conocer en profundidad el proceso que se realiza para hostear una aplicacion web en ASP.NET 5 le recomiendo que visite el proyecto  https://github.com/aspnet/hosting.

[snippet id=»171″]

Esta clase ServiceCollection, nos permitirá de una forma muy simple agregar todas las dependencias que tengamos, junto con sus respectivos lifetime, transient, singleton, per request etc etc. Este contenedor de servicios, es usado posteriormente por la plataforma para crear un IServiceProvider, pieza que en realidad es la usada por la plataforma cuando desea resolver una dependencia.

Nota: Al igual que antes, si desea descubir mas acerca de estas implementaciones puede ir al sitio del proyecto en https://github.com/aspnet/dependencyInjection.

Cuando utilizamos algun framework, como por ejemplo podría ser MVC, este en si mismo tiene una colección de servicios e implementaciones que serán necesarias registrar en esta colección de servicios, para esta tarea, cada framework suele crear métodos extensores de ServiceCollection con los cuales se realizará este registro de una forma sencilla como se ve a continuación:

[snippet id=»172″]

La flexibilidad de ASP.NET 5 nos permite que esto mismo que acabamos de hacer lo podamos hacer directametne en nuestro método Configure, asi por ejemplo lo anterior lo podríamos tener como.

[snippet id=»173″]

Pero, ¿que pasa con nuestros viejos y conocidos contenedores de dependencias, ya no son necesarios? Yo no diría tanto, ni lo contrario, como buen gallego… hay muchas características de estos que podemos echar en falta como por ejemplo el uso de convenciones y otros muchos elementos.. ¿Que hacemos entonces? Pues bien, ASP.NET 5 nos permite darnos la opción de crear nuestra propia implementacion de IServiceProvider, y nos lo permite con una pequeña modificación de los dos métodos anteriores.

[snippet id=»174″]

Fíjese como ahora la firma del método nos permite devolver la implementación del IServiceProvider que querramos y por suerte, el propio proyecto de Microsoft,  nos ofrece mecanismo para crear esta clase para los contenedores mas conocidos:

  • Castle Windsor
  • Unity
  • StructureMap
  • Autofac
  • Ninject

[snippet id=»175″]

 

Espero que esta entrada fuera interesante y más adelante volveremos a profundizar en este tema.

Saludos

Unai

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *