2014-06-25 5 views
21

ich dieses Paket bin mit Autofac mit meiner WebAPI Owin Anwendung zu integrieren:Wie kann Autofac mit WepApi 2 und Owin integriert werden?

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

Und nach diesem Beitrag:

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

Mein Code in Startup.cs wie folgt aussieht:

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

Wie auch immer ich es spinne, neu anordnen der Code oder was auch immer, Autofac ist einfach nicht in der Lage, etwas zu lösen. Vor Owin hatte ich meine Global.asax-Methode gut funktioniert:

protected void Application_Start() 
    { 
     IContainer container = EngineContext.InitializeEngine(); 

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

     GlobalConfiguration.Configure(WebApiConfig.Register); 
    } 

Was vermisse ich?

Dank

Antwort

21

Ok,

ich es herausgefunden. Die Autofac Owin-Integration erstellt tatsächlich ein Owin-Liftimescope, das über die gesamte Owin-Pipeline verfügbar ist und somit Middleware zur Verfügung steht und dieses Life-Scope auf die HttpRequestMessage erweitert. Dies ist der Lebensdauerbereich, der mit dem AutofacWebRequest-Tag markiert ist.

Daher muss der gesamte WebApi-Integrationscode beim Start der Anwendung noch ausgeführt werden. Ich habe inbegriffen:

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

verpasste aber:

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

im EngineContext.Initialize Methode, die alle Registrierungen über den Erbauer der Fall ist.

Hier finden Sie weitere Informationen, wie Autofac mit dem WebAPI zu integrieren, was natürlich auch im Fall von Owin getan werden muss:

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

Ich hoffe, dies ist nützlich!

+0

Haben Sie versucht, GlobalConfiguration.Configuration anstelle von "var config = new HttpConfiguration();" ? GlobalConfiguration.Configuration Mein Problem wurde behoben. – BrunoMartinsPro