ASP.NET Webサイトでは、静的クラスは各Webリクエストに固有ですか、それとも、必要に応じてインスタンス化され、GCが破棄することを決定するたびにGCされますか?
私が尋ねる理由は、以前にいくつかの静的クラスをC#で作成したことがあり、その動作が予想とは異なるためです。静的クラスは各リクエストに固有であると期待していましたが、そうではありません。
それらが各要求に固有ではない場合、それらを許可する方法はありますか?
更新:
driisが私に与えた答えはまさに私が必要としたものでした。私はすでにシングルトンクラスを使用していましたが、静的インスタンスを使用していたため、ユーザーが異なっていてもリクエスト間で共有されていましたが、この場合は悪いことでした。を使用HttpContext.Current.Items
すると、問題が完全に解決されます。将来この質問に遭遇した人のために、パターンを理解しやすいように簡略化して短縮した私の実装を以下に示します。
using System.Collections;
using System.Web;
public class GloballyAccessibleClass
{
private GloballyAccessibleClass() { }
public static GloballyAccessibleClass Instance
{
get
{
IDictionary items = HttpContext.Current.Items;
if(!items.Contains("TheInstance"))
{
items["TheInstance"] = new GloballyAccessibleClass();
}
return items["TheInstance"] as GloballyAccessibleClass;
}
}
}
filterContext.Result = new RedirectResult(...)
注意:リクエストをリダイレクトすると、たとえば、新しいHttpContextが作成されるため、アイテムが失われます。ここでは詳細:stackoverflow.com/questions/16697601/...