Ho appena configurato questo in una delle mie app. Ci sono diversi modi per farlo, ma mi piace questo approccio:
Autofac and ASP.NET Web API System.Web.Http.Services.IDependencyResolver Integration
Per prima cosa ho creato una classe che implementa l'interfaccia 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>();
}
}
e non ho un'altra classe che detiene i miei registrazioni:
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();
}
}
Poi, inizializzarlo a Application_Start
:
protected void Application_Start() {
//...
AutofacWebAPI.Initialize();
//...
}
Spero che questo aiuta.
Sfortunatamente, a partire dalla digitazione di questo commento, sembra che utilizzare Autofac per MVC 4 RC e Web API RC allo stesso tempo non funzioni. Ricevo avvisi del compilatore sui tipi non trovati negli assembly della framework API Web. Ho dovuto usare la risposta fornita da @tugberk e ri-implementare il resolver di risoluzione per aggirarlo. – NathanAldenSr