Этот вопрос больше подходит для подтверждения моего диагноза проблемы, с которой мы столкнулись, или для поиска альтернативных объяснений.
У нас есть HTTPModule, который перехватывает каждый запрос к нашему веб-приложению. Его задача - переводить конкретные параметры строки запроса, которые отправляют наши партнеры по интеграции.
Что более важно, он был подключен к StructureMap следующим образом:
public class SomeModule : IHttpModule
{
public SomeModule()
{
ObjectFactory.BuildUp(this);
}
public IDependency Dependency { get; set; }
}
Во время предыдущего выпуска казалось, что модуль не внедрялся во время выполнения обработки запроса. Это привело к некоторой (некрасивой) оборонительной проверке, добавленной как:
public class SomeModule : IHttpModule
{
public SomeModule()
{
ObjectFactory.BuildUp(this);
if (SomeDependency == null)
{
// HACK: Not sure why this corrects the issue!
Dependency = ObjectFactory.GetInstance<ISomeDependency>();
}
}
public IDependency Dependency { get; set; }
}
Вы заметите комментарий HACK - он решил проблему, но без веской причины.
Ну, этот же модуль был переназначен на другом сайте - и предыдущий хак больше не работал. Посмотрев на это некоторое время, я внес изменение, чтобы переместить вызов StructureMap за пределы конструктора, и вот, он работает.
public class SomeModule : IHttpModule
{
public IDependency Dependency { get; set; }
public void IHttpModule.Init(HttpApplication context)
{
Initialize();
// the rest of the code
}
private bool _initialized;
private void Initialize()
{
if (_initialized)
{
return;
}
ObjectFactory.BuildUp(this);
_initialized = true;
}
}
Итак, у меня есть несколько вопросов относительно этого поведения:
- Я подозреваю, что StructureMap не был полностью инициализирован / настроен при вызове конструктора HttpModule - согласен / не согласен, есть понимание?
- Я не нашел никаких справочных материалов, в которых указано, когда ожидать, что StructureMap будет инициализирован и готов к обслуживанию запросов. Есть ли такая документация?