Tôi vừa định cấu hình này trên một trong các ứng dụng của mình. Có nhiều cách khác nhau để làm việc đó nhưng tôi thích cách tiếp cận này:
Autofac and ASP.NET Web API System.Web.Http.Services.IDependencyResolver Integration
Trước tiên tôi tạo ra một lớp mà thực hiện giao diện System.Web.Http.Services.IDependencyResolver
.
internal class AutofacWebAPIDependencyResolver : System.Web.Http.Services.IDependencyResolver {
private readonly IContainer _container;
public AutofacWebAPIDependencyResolver(IContainer container) {
_container = container;
}
public object GetService(Type serviceType) {
return _container.IsRegistered(serviceType) ? _container.Resolve(serviceType) : null;
}
public IEnumerable<object> GetServices(Type serviceType) {
Type enumerableServiceType = typeof(IEnumerable<>).MakeGenericType(serviceType);
object instance = _container.Resolve(enumerableServiceType);
return ((IEnumerable)instance).Cast<object>();
}
}
Và tôi có một lớp học mà giữ đăng ký của tôi:
internal class AutofacWebAPI {
public static void Initialize() {
var builder = new ContainerBuilder();
GlobalConfiguration.Configuration.ServiceResolver.SetResolver(
new AutofacWebAPIDependencyResolver(RegisterServices(builder))
);
}
private static IContainer RegisterServices(ContainerBuilder builder) {
builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly).PropertiesAutowired();
builder.RegisterType<WordRepository>().As<IWordRepository>();
builder.RegisterType<MeaningRepository>().As<IMeaningRepository>();
return
builder.Build();
}
}
Sau đó, khởi tạo nó ở Application_Start
:
protected void Application_Start() {
//...
AutofacWebAPI.Initialize();
//...
}
Tôi hy vọng điều này sẽ giúp.
Thật không may, khi đánh máy nhận xét này, có vẻ như sử dụng Autofac cho MVC 4 RC và Web API RC cùng một lúc không hoạt động. Tôi nhận được cảnh báo trình biên dịch về các loại không được tìm thấy trong các hội đồng khung API Web. Tôi đã phải sử dụng câu trả lời được cung cấp bởi @tugberk và triển khai lại trình phân giải phụ thuộc để giải quyết nó. – NathanAldenSr