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
クラス内で自己完結型としてより理にかなっているようなもの。