2014-06-25 18 views
21

Sto usando questo pacchetto di integrarsi con la mia Autofac WebAPI applicazione Owin:Come integrare Autofac con WepApi 2 e 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 assomiglia a questo:

 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); 

Tuttavia, in qualsiasi modo lo giri, riorganizzare 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

risposta

21

Ok,

ho 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 codice di integrazione WebApi precedente deve ancora essere eseguito all'avvio dell'applicazione. Ho incluso:

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

ma ha sbagliato:

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

nel metodo EngineContext.Initialize, che fa tutte le registrazioni tramite il costruttore.

Qui è possibile trovare maggiori informazioni su come integrare Autofac con la WebAPI, che deve ovviamente essere fatto anche nel caso di Owin:

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

Spero che questo è utile!

+0

Hai provato a utilizzare GlobalConfiguration.Configuration invece di "var config = new HttpConfiguration();" ? GlobalConfiguration.Configuration Risolto il problema. – BrunoMartinsPro