MVC Web API не работает с Autofac Integration
Я использовал интеграцию MVC из autofac следующим образом:
...
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Но теперь я хочу воссоздать решение с новым Web Api RTM.
И я хочу использовать новый класс AutofacWebApiDependencyResolver.
Но если я сделаю это с AutofacWebApiDependencyResolver, я получил эту ошибку:
Тип Autofac.Integration.WebApi.AutofacWebApiDependencyResolver как представляется, не реализует Microsoft.Practices.ServiceLocation.IServiceLocator.
Я прочитал, что мне нужно сделать это сейчас для настройки распознавателя:
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
Но если я установил его с '=', он не будет установлен. Его все еще DefaultResolver...
Если я снова использую класс MVC AutofacDependencyResolver, он работает.
Были ли проблемы с autofac и web api rtm? (текущая интеграция - версия RC)
Ответы
Ответ 1
ASP.Net Wep.API и ASP.NET MVC использует два разных IDependencyResolver
(поскольку они заставляли Wep.API не зависеть от ASP.NET MVC), поэтому вам нужно настроить оба:
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver =
new AutofacWebApiDependencyResolver(container);
Таким образом, AutofacDependencyResolver
необходим для ввода decices в обычные MVC Controller
производные контроллеры.
И AutofacWebApiDependencyResolver
необходим для встраивания зависимостей в производные контроллеры Web.API ApiController
.
И не забудьте зарегистрировать свои контроллеры Api в своем контейнере с вызовом (он отличается от обычного метода builder.RegisterControllers
):
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());