Come integrare Autofac con WepApi 2 e Owin?

Sto usando questo pacchetto per integrare Autofac con la mia applicazione WebApi Owin:

https://www.nuget.org/packages/Autofac.WebApi2.Owin

E seguendo questo post:

http://alexmg.com/owin-support-for-the-web-api-2-and-mvc-5-integrations-in-autofac/

Il mio codice in Startup.cs si presenta così:

var config = new HttpConfiguration(); IContainer container = EngineContext.InitializeEngine(); var dependencyResolver = new AutofacWebApiDependencyResolver(container); config.DependencyResolver = dependencyResolver; app.UseAutofacMiddleware(container); app.UseAutofacWebApi(config); WebApiConfig.Register(config); app.UseWebApi(config); 

Comunque, in qualsiasi modo lo giri, riorganizzi il codice o qualsiasi altra cosa, Autofac non è in grado di risolvere nulla. Prima di Owin, il mio metodo Global.asax funzionava perfettamente:

  protected void Application_Start() { IContainer container = EngineContext.InitializeEngine(); var dependencyResolver = new AutofacWebApiDependencyResolver(container); GlobalConfiguration.Configuration.DependencyResolver = dependencyResolver; GlobalConfiguration.Configure(WebApiConfig.Register); } 

Cosa mi manca?

Grazie

Ok,

L’avevo capito. L’integrazione di Autofac Owin crea in realtà un telescopio Owin, che è disponibile attraverso l’intera pipeline Owin, quindi disponibile per il middleware ed estende questo lifetimescope a HttpRequestMessage. Questo è il lifetimope contrassegnato con il tag AutofacWebRequest.

Quindi tutto il precedente codice di integrazione WebApi deve ancora essere eseguito all’avvio dell’applicazione. Ho incluso:

  var dependencyResolver = new AutofacWebApiDependencyResolver(container); config.DependencyResolver = dependencyResolver; 

ma mancato:

 var builder = new ContainerBuilder(); builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest(); 

nel metodo EngineContext.Initialize, che esegue tutte le registrazioni tramite il builder.

Qui puoi trovare maggiori informazioni su come integrare Autofac con WebApi, che ovviamente deve essere fatto anche nel caso di Owin:

https://code.google.com/p/autofac/wiki/WebApiIntegration

Spero che questo sia utile!