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;
}
}
}