HttpContextWrapper и HttpContextBase, как здесь, были введены, чтобы сделать HttpContext более удобным издевательский / проверяемый.
Я пытаюсь использовать его с S # arp Architecture, и у меня возникают некоторые проблемы.
Мои контроллеры MVC настроены на прием аргумента HttpContextBase в конструкторе, и во время Application_Start HttpContextBase регистрируется в Castle.Windor следующим образом:
container.Register(Component.For<HttpContextBase>().UsingFactoryMethod(
() => new HttpContextWrapper(HttpContext.Current)));
Некоторое время это работало нормально, но потом я понял, что Castle запускает этот метод Factory только один раз, поэтому все запросы получают исходный HttpContextWrapper. На самом деле его нужно создавать заново для каждого запроса. Команда Castle.Windsor для этого будет:
container.Register(Component.For<HttpContextBase().
LifeStyle.PerWebRequest.UsingFactoryMethod(
() => new HttpContextWrapper(HttpContext.Current)));
... но оказывается, что Castle.Windsor не позволяет использовать LifeStyle.PerWebRequest в Application_Start (как описано здесь)
Что мне делать? Есть ли простой способ обойти это, или мне следует отказаться от HttpContextWrapper и внедрить свою собственную фабрику, чтобы создавать новые по мере необходимости?