Новое веб-приложение MVC 4 с использованием autofac 3.0 на IIS 7.5. Как я ввожу зависимость в IHttpModule?autofac - инъекция зависимостей в IHttpModule
Я попробовал инъекции конструктора, который привел к:
Конструктор по типу «AnonymousIdentityModule» не найден
Таким образом, кажется, что внутренние органы требуют конструктор без параметров для HTTP модулей. Я также попробовал вложение свойств, но это не привело к тому, что фактически не была введена зависимость.
Регистрация
builder.RegisterType<AnonymousIdentityModule>().As<IHttpModule>().PropertiesAutowired().InstancePerHttpRequest();
IHttpModule Код
public class AnonymousIdentityModule : IHttpModule
{
private readonly IServiceManager _serviceManager;
// this causes "constructor not found" exception
public AnonymousIdentityModule(IServiceManager serviceManager)
{
_serviceManager = serviceManager;
}
// never assigned by autofac
public IServiceManager ServiceManager
{
get { return _serviceManager; }
set { _serviceManager = value; }
}
...
}
web.config
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="AnonymousIdentityModule" type="AnonymousIdentityModule" />
</modules>
</system.webServer>
I foun d этот старый article относящийся к Виндзору, но не имеющий аналогов в autofac.
Я пробовал HtpModuleMagic в сочетании с этой статьей sapiensworks и первым запросом работал, но последующие запросы бросали ошибки об удаляемом DbContext. Мой менеджер сервисов имеет длинную цепочку зависимостей, включая инфраструктуру сущности, которую я предполагаю, чтобы все объекты были правильно созданы. Я решил просто поместить мой код в базовый контроллер и убрать все мои контроллеры. Гораздо чище, чем переписывать тонны кода, чтобы добиться инъекции в одном глупом модуле http. – TugboatCaptain
@TugboatCaptain, это было долгое время, но обычно объявляя зависимость от фабрики для данного типа (называть его «MyService») так же просто, как в зависимости от 'Func>'. Вам не нужно писать заводской код, Autofac делает это за вас. –