2014-06-25 20 views
21

Tôi đang sử dụng gói này để tích hợp Autofac với WebAPI ứng dụng Owin tôi:Làm thế nào để tích hợp Autofac với WepApi 2 và Owin?

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

Và sau bài đăng này:

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

Mã của tôi trong Startup.cs trông như thế này:

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

Tuy nhiên, cách nào tôi xoay nó, sắp xếp lại mã hoặc bất cứ điều gì, Autofac chỉ là không thể giải quyết bất cứ điều gì. Trước khi Owin tôi có phương pháp Global.asax của tôi hoạt động tốt:

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

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

     GlobalConfiguration.Configure(WebApiConfig.Register); 
    } 

Tôi đang thiếu gì?

Cảm ơn

Trả lời

21

Ok,

I figured it out. Việc tích hợp Autofac Owin thực sự tạo ra một kính hiển vi Owin, có sẵn thông qua toàn bộ đường ống Owin, do đó có sẵn cho phần mềm trung gian và mở rộng vòng đời này tới HttpRequestMessage. Đây là thời gian sống được đánh dấu bằng thẻ AutofacWebRequest.

Vì vậy, tất cả mã tích hợp WebApi trước đó vẫn cần được thực hiện khi khởi động ứng dụng. Tôi đã bao gồm:

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

nhưng bỏ lỡ:

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

trong phương pháp EngineContext.Initialize, mà làm tất cả các việc đăng ký thông qua xây dựng.

Ở đây bạn có thể tìm thêm thông tin về làm thế nào để tích hợp Autofac với WebAPI, mà rõ ràng là cần phải được thực hiện cũng trong trường hợp của Owin:

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

Tôi hy vọng điều này là hữu ích!

+0

Bạn đã thử sử dụng GlobalConfiguration.Configuration thay vì "var config = new HttpConfiguration();" ? GlobalConfiguration.Configuration Đã sửa lỗi của tôi. – BrunoMartinsPro

Các vấn đề liên quan