Como señala Darin, ASP.NET MVC 4 es un Framework y es independiente del contenedor. Es por eso que proporciona un localizador de servicios en forma de IDependencyResolver
. Esto permite que cualquier persona conecte su contenedor de su elección.
Sin embargo, no llamaría a esto un patrón anti. Esto le permite usar el contenedor de su elección, pero no forza el desarrollador de la aplicación para usar la ubicación del servicio. Si el marco obligó al desarrollador a utilizar la ubicación del servicio, entonces lo llamaría un antipatrón. Pero el desarrollador que crea una aplicación ASP.NET MVC puede usar DI de forma gratuita a través de la inyección del constructor, la configuración de la propiedad o la ubicación del servicio. Es su elección.
Mire todos los ejemplos de ASP.NET MVC de inyección de dependencia publicados por mí o por el equipo ASP.NET MVC. En casi todos los casos, están usando inyección de constructor. No están usando la ubicación del servicio.
De hecho, la mayoría del código fuente de ASP.NET MVC no usa la ubicación del servicio para recuperar dependencias. Hay algunos lugares clave donde el MVC llama al localizador de servicios para API heredadas y demás. Pero eso es todo.
+1 Los marcos siguen reglas diferentes que las aplicaciones.Desea mantener un agnóstico de contenedor de marcos (en el caso de que una aplicación que quiera usar el framework ya use un contenedor diferente) y generalmente no desea aplicar el uso de DI en esas aplicaciones (ya que es posible que no quieran usar DI en absoluto). –
No compro el argumento de que solo porque es un marco, un localizador de servicios es apropiado. Sí, los marcos son diferentes a las aplicaciones, pero es perfectamente posible escribir un marco sin usar un Localizador de servicios. Basta con mirar ASP.NET MVC 1 y 2, o incluso algo tan complejo como WCF. El problema con DependencyResolver en ASP.NET MVC 3+ es que no se trata solo de un detalle de implementación interna, sino que se publica y promociona como 'soporte DI' público. –
@MarkSeemann Tuve esta discusión con el arquitecto jefe de un gran marco empresarial. Si puede decirme cómo hacer que dicho contenedor sea independiente del contexto y no aplicar el patrón DI en todas las aplicaciones que se escriben usando ese marco, estaría más que contento de escucharlas. –