2010-06-11 3 views
2

J'injecte HttpContextBase dans une classe de mise en cache. HttpContextBase est enregistré en tant que PerWebRequest. J'interagis avec la classe de mise en cache sur chaque requête Web et cela fonctionne bien, mais j'ai également besoin d'initialiser le cache au démarrage de l'application.Résolution Windsor PerWebRequest dans Application_Start

Je comprends que PerWebRequest ne fonctionne pas dans Application_Start si:

castle PerRequestLifestyle not recognize

Quelle est la meilleure façon de résoudre ce dans ma situation?

Répondre

4

N'utilisez pas d'éléments qui dépendent des requêtes par requête Web en dehors de la requête Web. Si vous devez dépendre d'une classe que vous avez enregistrée comme PWR, je suggère d'obtenir un autre composant pour ce service avec un style de vie différent et l'utiliser dans Application_Start et en utilisant IHandlerSelector pour renvoyer PWR lorsque vous êtes dans une requête web, et l'autre sinon

+0

il n'est pas déraisonnable de vouloir préremplir un cache au démarrage de l'application, alors quelles options ai-je si je veux utiliser Windsor pour résoudre la classe de mise en cache qui dépend de HttpContextBase? –

+0

Comment pouvez-vous utiliser HttpContextBase en dehors de la requête web? –

+0

Vous avez toujours un HttpContext dans l'événement Application_Start –

4

Essayez d'utiliser un hybrid webrequest/transient lifestyle.

+0

bien que je dis toujours - refactor devrait être votre première option –

+0

@ mauricio-scheffer Je suis un peu confus, disons que je m'enregistre IDBcontext avec hybride webrequest dans mon applicaiton_start , maintenant, quand l'application démarre, il n'y a pas de httpcontext, donc elle sera enregistrée comme tansient. Alors, comment IDBcontext sera-t-il enregistré comme mode de vie perrequest? – Arvand

+0

@Arvand s'il existe un HttpContext, le conteneur va essayer de le résoudre à partir du contexte. Sinon, cela créera une nouvelle instance. –

Questions connexes