c# asp.net-mvc asp.net-web-api autofac

c# - Cuál es la diferencia entre DependencyResolver.SetResolver y HttpConfiguration.DependencyResolver en WebAPI



asp.net-mvc asp.net-web-api (3)

Evite mezclar MVC y Web API en el mismo proyecto. Microsoft parece sugerir esto, porque la plantilla de Visual Studio para Web API mezcla el proyecto automáticamente con MVC, pero esta es una mala idea.

Desde el punto de vista arquitectónico, MVC y Web API son completamente diferentes. MVC es una tecnología de interfaz de usuario destinada a optimizar la experiencia del usuario final. Web API es una tecnología de servicio web que tiene como objetivo optimizar la experiencia del desarrollador (cliente).

MVC y Web API no comparten ningún código específico de presentación. Mezclarlos en el mismo proyecto solo hace que ese proyecto sea más grande y más complicado.

Pero quizás lo más importante es que ambos tipos de aplicaciones tienen sus propias necesidades de configuración de DI. Tienen su propia raíz de composición y mezclar eso en una sola configuración DI (un solo contenedor DI) puede hacer que su configuración sea extraordinariamente difícil.

Y, por último, mezclar Web API con MVC en el mismo proyecto conduce a dolorosos conflictos ambiguos de nombres, ya que los ensambles API Web contienen muchas clases que comparten exactamente el mismo nombre que las contrapartes MVC (pero con implementaciones ligeramente diferentes).

Tengo un proyecto existente, que usa AutoFac como IoC.

En el código de registro tengo estas líneas:

var resolver = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(resolver)); config.DependencyResolver = new AutofacWebApiDependencyResolver(resolver);

Entonces mi pregunta es ¿cuál es la diferencia entre DependencyResolver.SetResolver y HttpConfiguration.DependecyResolver ? ¿Por qué debería asignarles ambos?


Supongo que confundiste entre MVC y Web API:

DependencyResolver.SetResolver

es para MVC y pertenece al ensamblado System.Web.Mvc . De otra manera:

Configuration.DependencyResolver

para Web APi, pertenece al ensamblado System.Web.Http .

Entonces, en su proyecto, usa MVC y Web Api, es por eso que ve dos líneas para configurar IoC para cada


DependencyResolver.SetResolver es una construcción MVC y es necesaria para soportar IOC utilizando MVC.

GlobalConfiguration.Configuration.DependencyResolver es específico de WebApi.

Usted solo necesitará ambos si desea admitir tanto MVC como WebApi dentro del mismo proyecto.

También puede valer la pena señalar que normalmente no es necesario establecer explícitamente DependencyResolver.SetResolver ya que el Ninject Mvc3 tiene un arranque para esto ... ver here