Подтвердить что ты не робот

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)

4b9b3361

Ответ 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());