2012-09-05 18 views
17

ho usato l'integrazione MVC da autofac come questo:MVC Web API che non funziona con Autofac integrazione

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

Ma ora voglio ricreare la soluzione con il nuovo RTM Web Api. E voglio usare la nuova classe AutofacWebApiDependencyResolver.

Ma se faccio questo con AutofacWebApiDependencyResolver ho ottenuto questo errore:

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

Ho letto che devo farlo ora per l'impostazione del risolutore:

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

Ma se impostarlo con '=', non è impostato. È ancora DefaultResolver ...

Se utilizzo nuovamente la classe MVC AutofacDependencyResolver, funziona.

Sono ancora presenti problemi con autofac e web api rtm? (l'integrazione corrente è la versione RC)

risposta

44

ASP.Net Wep.API e ASP.NET MVC utilizza due diversi IDependencyResolver (perché hanno progettato il Wep.API per non dipendere da ASP.NET MVC) quindi è necessario impostare entrambi :

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

Così il AutofacDependencyResolver è necessario per iniettare convenienze a regolari MVC Controller controllori derivati.

E lo AutofacWebApiDependencyResolver è necessario per iniettare dipendenze dai controller derivati ​​Web.API ApiController.

E non dimenticare di registrare i controller API nel costruttore contenitore con la chiamata (che differisce dal solito metodo builder.RegisterControllers):

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

Io uso AutofacDependencyResolver di nuovo per il mio lavoro. Grazie per l'informazione. Ci sono dei link di riferimento? Microsoft/autofac ha spiegato questo qualcosa? È utilizzare l'ApiControler, ma se voglio lanciare DependecyResolver su AutofacWebApiDependencyResolver, fallisce. – user437899

+0

Sembra che se accedo al resolver DependencyResolver.Curren, ottengo il resolver MVC. E WebApiResolver semms di essere responsabile per inserire parametri in ApiControllers. Se voglio risolvere qualsiasi tipo all'interno di un metodo di controllo, devo usare MVC Resovler – user437899

+0

@Max scusa ero in ritardo entrambe le volte e gli altri membri della community hanno rifiutato la tua modifica perché comunque aggiungeva un buon punto ma avresti dovuto lasciare un commento invece (so che non hai abbastanza reputazione ma non è lontana) perché la politica di gestione delle modifiche di risposta è piuttosto severa e i revisori hanno ritenuto di voler cambiare troppo la mia risposta. Comunque grazie per l'aiuto che ho modificato nel tuo suggerimento. – nemesv

Problemi correlati