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