Dans mon application ASP.NET utilisant des sessions InProc, Session_End appelle une méthode statique dans un autre objet pour effectuer un nettoyage spécifique à la session. Ce nettoyage utilise une connexion de base de données partagée que je stocke dans l'état de l'application. Le problème est que je ne vois pas comment accéder à l'état de l'application sans la passer (ou plutôt la connexion à la base de données) en tant que paramètre à la méthode de nettoyage. Comme je ne suis pas dans une requête, je n'ai pas de HttpContext courant, et je ne trouve aucune autre méthode statique pour accéder à l'état.Accès à HttpApplicationState au cours de Session_End
Ai-je raté quelque chose?
MISE À JOUR: Il semble que ma question nécessite des éclaircissements supplémentaires, alors laissez-moi essayer l'exemple de code suivant. Ce que je veux être en mesure de le faire est:
// in Global.asax
void Session_End(object sender, EventArgs e)
{
NeedsCleanup nc = Session["NeedsCleanup"] as NeedsCleanup;
nc.CleanUp();
}
Mais le problème est que la méthode CleanUp
en a besoin à transformer les informations qui sont stockées dans l'état d'application. Je fais déjà ce qui suit, mais c'est exactement ce que j'espérais éviter; c'est ce que je voulais dire par "... sans le passer ... comme paramètre à la méthode de nettoyage" ci-dessus.
// in Global.asax
void Session_End(object sender, EventArgs e)
{
NeedsCleanup nc = Session["NeedsCleanup"] as NeedsCleanup;
nc.CleanUp(this.Application);
}
Je n'aime pas l'idée que Global.asax
a de savoir où l'objet NeedsCleanup
obtient ses informations. Ce genre de chose qui a plus de sens comme autonome dans la classe.
Après plus de réflexion, j'ai décidé que vous avez frappé le problème avec cette réponse. Ce n'est pas que ma question n'a pas de solution (évidente), mais que j'essaie de résoudre le mauvais problème. Puisque "NeedsCleanup" est créé quand I * peut * obtenir l'état de l'application, il doit mettre en cache l'état dans son ctor.Bien découplé. – DocMax