[ASP.NET MVC 3] Por qué IDependencyResolver no cumple con la filosofía de los IoC
No se si el título es muy adecuado, pero espero que leyendo esto y los artículos que menciono os quede más claro.
Tengo pendiente escribir una serie de sobre DI (Qué es, patrones, antipatrones…), pero de momento voy a escribir sobre este tema ya que el otro día por twitter lo estuve hablando con @pablonete sobre como implementar DI en ASP.NET MVC, Yo conocía desde la versión 1.0 la implentación de DI usando un IControllerFactory pero ví que en la versión 3 se había añadido la interfaz IDependecyResolver y parecía la manera correcta de hacerlo ahora, así que le pasé un enlace de como hacerlo así.
Peroooo, si leemos a los guruses hablar de temas de arquitecturas y mas concretamente sobre DI, como podemos leer en este artículo de Mark Seemann’s, los contenedores de dependencias disponen de 3 métodos para registrar, resolver y limpiar dependencias, Mark propone llamar a este patrón Register Resolve Release pattern basandose el el nombre de los métodos de CastleWindsor (En otros contenedores se utilizan otros nombres que a lo mejor pueden despistar un poco al programador, en el caso de Unity el método Release es TearDown)
En ASP.NET MVC 3 han añadido la interfaz IDependencyResolver para facilitarnos el uso de DI, pero esta interfaz carece de un método Release al contrario de IControllerFactory:
public interface IControllerFactory
{
IController CreateController(RequestContext requestContext, string controllerName);
void ReleaseController(IController controller);
}
public interface IDependencyResolver
{
object GetService(Type serviceType);
IEnumerable<object> GetServices(Type serviceType);
}
Os recomiendo la lectura de este artículo de Mike Hadlow
The MVC 3.0 IDependencyResolver interface is broken. Don’t use it with Windsor.
Leyendo esto me asaltan las dudas de porque han hecho esto de esta manera la gente del equipo de MVC, si ya disponíamos desde la versión 1.0 de un mecanismo que al parecer se adapta mejor a estos patrones ¿no?
Espero opiniones al respecto y si vemos que esto da para rato, creamos una entrada en el Grupo de AUGES en LinkedIn.
Un saludo.