在我使用 InProc 会话的 ASP.NET 应用程序中,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
对象从哪里获取信息的想法。那种在课堂上自成一体更有意义的事情。