2010-06-11 5 views
2

Я вставляю HttpContextBase в класс кеширования. HttpContextBase зарегистрирован как PerWebRequest. Я взаимодействую с классом кеширования в каждом веб-запросе, и это отлично работает, но мне также нужно инициализировать кеш при запуске приложения.Виндзор PerWebRequest разрешение в Application_Start

Я понимаю, что PerWebRequest не работает в Application_Start хотя:

castle PerRequestLifestyle not recognize

Что такое лучший способ решить эту проблему в моей ситуации?

ответ

4

Не используйте материал, зависящий от материала для веб-запроса вне веб-запроса.

Если вам нужно зависеть от класса, который вы зарегистрировали как PWR, я бы предложил получить другой компонент для этой службы с различным образом жизни и использовать ее в Application_Start и используя IHandlerSelector, чтобы вернуть PWR один, когда вы находитесь в веб-запросе, а другой другой

+0

Неразумно хотеть предварительно заполнять кеш при запуске приложения, поэтому какие параметры у меня есть, если я хочу использовать Windsor для разрешения класса кеширования, который зависит от HttpContextBase? –

+0

Как вы можете использовать HttpContextBase вне веб-запроса? –

+0

У вас все еще есть HttpContext в событии Application_Start –

4

Try используя hybrid webrequest/transient lifestyle.

+0

Хотя я все еще говорю - рефакторинг должен быть вашим первым вариантом –

+0

@ mauricio-scheffer Я немного смущен, допустим, я регистрирую IDBcontext с гибридным web-запросом в своем applicaiton_start , теперь, когда приложение запускается, нет httpcontext, поэтому он будет зарегистрирован как успокаивающий. Итак, как будет IDBcontext когда-либо зарегистрирован как perrequest образ жизни? – Arvand

+0

@Arvand, если есть HttpContext, контейнер попытается разрешить его из контекста. В противном случае он создаст новый экземпляр. –

Смежные вопросы