2012-09-05 33 views
17

tôi đã sử dụng tích hợp MVC từ autofac như thế này:MVC Web API không làm việc với Autofac Integration

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

Nhưng bây giờ tôi muốn tạo các giải pháp với RTM Web Api mới. Và tôi muốn sử dụng lớp AutofacWebApiDependencyResolver mới.

Nhưng nếu tôi làm điều này với AutofacWebApiDependencyResolver tôi đã nhận lỗi này:

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

tôi đọc mà tôi phải làm điều này ngay bây giờ để thiết lập phân giải:

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

Nhưng nếu tôi đặt nó với '=', nó chưa được đặt. Nó vẫn là DefaultResolver ...

Nếu tôi sử dụng lại lớp MVC AutofacDependencyResolver, nó hoạt động.

Bạn vẫn gặp sự cố với autofac và web api rtm? (tích hợp hiện tại là phiên bản RC)

Trả lời

44

ASP.Net Wep.API và ASP.NET MVC sử dụng hai khác nhau IDependencyResolver (vì chúng thiết kế Wep.API không phụ thuộc vào ASP.NET MVC) nên bạn cần thiết lập cả hai :

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

Vì vậy, AutofacDependencyResolver là cần thiết để tiêm các ký hiệu cho bộ điều khiển có nguồn gốc MVC Controller.

Và cần AutofacWebApiDependencyResolver để chèn các phụ thuộc vào Web.API ApiController bộ điều khiển có nguồn gốc.

Và đừng quên đăng ký điều khiển Api của bạn trong builder container của bạn với các cuộc gọi (nó khác với phương pháp thông thường builder.RegisterControllers):

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

tôi sử dụng AutofacDependencyResolver một lần nữa cho công việc của tôi. Cảm ơn bạn đã cung cấp thông tin. Có một số liên kết tham chiếu không? Có phải microsoft/autofac đã giải thích điều này ở đâu? Được sử dụng ApiControler nhưng nếu tôi muốn cast DependecyResolver để AutofacWebApiDependencyResolver, nó không thành công. – user437899

+0

Dường như là nếu tôi truy cập trình phân giải bởi DependencyResolver.Curren, tôi nhận được trình giải quyết MVC. Và các WebApiResolver semms chịu trách nhiệm cho các tham số tiêm vào ApiControllers. Nếu tôi muốn giải quyết bất kỳ loại nào trong một phương pháp điều khiển, tôi phải sử dụng MVC Resovler – user437899

+0

@Max xin lỗi tôi đã trễ cả hai lần và các thành viên khác trong cộng đồng từ chối chỉnh sửa của bạn bởi vì nó đã thêm điểm tốt nhưng bạn nên để lại nhận xét thay vào đó (tôi biết rằng bạn không có đủ danh tiếng nhưng không xa lắm) vì chính sách xử lý các chỉnh sửa trả lời khá nghiêm ngặt và người đánh giá cảm thấy rằng bạn muốn thay đổi câu trả lời của tôi quá nhiều. Dù sao nhờ sự giúp đỡ tôi đã chỉnh sửa trong đề xuất của bạn. – nemesv

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