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 sais pas comment accéder à l'état de l'application sans le passer (ou plutôt la connexion de 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 actuel, et je ne trouve aucune autre méthode statique pour accéder à l'état.
Est-ce que j'ai raté quelque chose ?
MISE À JOUR : Il semble que ma question nécessite des éclaircissements supplémentaires, alors permettez-moi d'essayer l'exemple de code suivant. Ce que je veux pouvoir faire est :
// dans 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
a besoin à son tour d'informations qui sont stockées dans l'état de l'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... en tant que paramètre à la méthode de nettoyage" ci-dessus.
// dans Global.asax
void Session_End(object sender, EventArgs e)
{
NeedsCleanup nc = Session["NeedsCleanup"] as NeedsCleanup;
nc.CleanUp(this.Application);
}
Je n'aime tout simplement pas l'idée que Global.asax
doive savoir d'où l'objet NeedsCleanup
obtient ses informations. Cela a plus de sens en tant qu'entité autonome au sein de la classe.