2012-09-05 35 views
17

que utiliza la integración de MVC autofac así:MVC Web API que no trabajan con Autofac Integración

... 
var container = builder.Build(); 
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

Pero ahora quiero volver a crear la solución con el nuevo RTM Web API. Y quiero usar la nueva clase AutofacWebApiDependencyResolver.

Pero si hago esto con AutofacWebApiDependencyResolver tengo este error:

The type Autofac.Integration.WebApi.AutofacWebApiDependencyResolver does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator.

He leído que tengo que hacer esto ahora para configurar el sistema de resolución:

GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container); 

Pero si configurarlo con '=', no está establecido. Sigue siendo el DefaultResolver ...

Si utilizo la clase MVC AutofacDependencyResolver nuevamente, funciona.

¿Todavía hay problemas con la aplicación autofac y la web? (la integración actual es la versión RC)

Respuesta

44

ASP.Net Wep.API y ASP.NET MVC utiliza dos IDependencyResolver diferentes (porque diseñaron el Wep.API para no depender de ASP.NET MVC) por lo que necesita configurar ambos :

var container = builder.Build(); 
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
GlobalConfiguration.Configuration.DependencyResolver = 
    new AutofacWebApiDependencyResolver(container); 

Así que la AutofacDependencyResolver se necesita para inyectar decencias a regulares MVC Controller controladores derivados.

Y se necesita AutofacWebApiDependencyResolver para inyectar dependencias a los controladores derivados Web.API ApiController.

Y no se olvide de dar de alta sus controladores de API en su constructor recipiente con la llamada (que difiera de lo normal método builder.RegisterControllers):

builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 
+0

utilizo AutofacDependencyResolver de nuevo para mi trabajo. Gracias por la información. ¿Hay algunos enlaces de referencia? ¿Microsoftoft/autofac explicó esto? Es usar ApiControler pero si deseo convertir DependecyResolver a AutofacWebApiDependencyResolver, falla. – user437899

+0

Parece ser que si accede al resolver por DependencyResolver.Curren, obtengo el resolver MVC. Y el servidor WebApiResolver se encarga de inyectar parámetros en ApiControllers. Si quiero resolver cualquier tipo dentro de un método de controlador, tengo que usar MVC Resovler – user437899

+0

@Max. Lamento haber llegado tarde las dos veces y los otros miembros de la comunidad rechazaron tu edición porque si bien agregó un buen punto, deberías haber dejado un comentario en su lugar (sé que no tiene suficiente reputación pero no está lejos) porque la política de manejo de las ediciones de respuestas es bastante estricta y los revisores consideraron que desea cambiar demasiado mi respuesta. De todos modos, gracias por la ayuda que he editado en su sugerencia. – nemesv

Cuestiones relacionadas