martes, 6 de diciembre de 2011

Dependency Injection sencillo en asp.net

Siguiendo un poco el hilo de mi post anterior Seguridad Flexible en asp.net usando módulos hago este donde veremos como implementar nuestro propia y muy simple Inyección de Dependencias (Dependency Injection, DI) que es una forma de inversión de control.

Antes de seguir es bueno comentar que si alguna vez necesitan hacer algo como esto, pueden considerar usar SpringNet el cual no sólo ofrece DI sino muchas otras funcionalidades, aunque no lo he probado en .Net sí lo he usado mucho la versión en Java y me ha sido de gran utilidad.

Bueno manos a la obra:
Primero que nada vamos  necesitar definir la forma como se injectaran las dependencias y quien será el responsable:
  1. La forma, haré que todas mis páginas implementen una interfaz la cual el objeto responsable de inyectar las dependencias reconocerá, recuerden que esta es una versión simplificada de un DI
  2. El responsable de inyectar las dependencias necesarias a las páginas será una clase que implemente la interfaz IHttpHandlerFactory llamada SimpleInjectorPageHandlerFactory, en dicha clase extenderemos al PageHandlerFactory que define asp.net para que la implementación sea más simple.
Para que la inyección funcione necesitamos configurar que los requests que soliciten páginas aspx sean procesados por nuestra clase, en la sección httpHandlers creamos una entrada nueva de la siguiente forma: 
<add verb="*" path="*.aspx" type="lib.ioc.di.SimpleInjectorPageHandlerFactory"/>
a continuación un ejemplo de como luce el web.config:



Aquí solo demostraré como hacer funcionar todo el mecanismo de inyección y en un post siguiente hablaré de como usar este mecanismo para soportar internacionalización en asp.net usando gettext.

Todo el código está en la misma aplicación de ejemplo del post anterior y la pueden encontrar aquí. Allí puse una interfaz IResource con una implementación sencilla solo para demostrar que funciona.


Hasta la próxima.

No hay comentarios:

Publicar un comentario

Deja tu comentario :D