В моем приложении ASP.NET, использующем сеансы InProc, Session_End вызывает статический метод в другом объекте, чтобы выполнить очистку для конкретного сеанса. Эта очистка использует соединение с общей базой данных, которое я храню в состоянии приложения.
Проблема в том, что я не вижу, как получить доступ к состоянию приложения, не передавая его (или, скорее, соединение с базой данных) в качестве параметра методу очистки. Поскольку я не в запросе, у меня нет текущего HttpContext, и я не могу найти какой-либо другой статический метод для доступа к состоянию.
Я что-то упустил?
ОБНОВЛЕНИЕ : Похоже, мой вопрос нуждается в дополнительном разъяснении, поэтому позвольте мне попробовать следующий пример кода. То, что я хочу сделать, это:
// in Global.asax
void Session_End(object sender, EventArgs e)
{
NeedsCleanup nc = Session["NeedsCleanup"] as NeedsCleanup;
nc.CleanUp();
}
Но проблема в том, что метод CleanUp
, в свою очередь, нуждается в информации, которая хранится в состоянии приложения. Я уже делаю следующее, но это именно то, чего я надеялся избежать; это то, что я имел в виду под «... не передавая это ... как параметр методу очистки» выше.
// in Global.asax
void Session_End(object sender, EventArgs e)
{
NeedsCleanup nc = Session["NeedsCleanup"] as NeedsCleanup;
nc.CleanUp(this.Application);
}
Мне просто не нравится идея, что Global.asax
имеет , чтобы знать, откуда объект NeedsCleanup
получает свою информацию. Подобные вещи, которые имеют больше смысла как самодостаточные в классе.