ASP .Net Webアプリケーションにシングルトンパターンを実装する場合、静的変数のスコープは現在のユーザーセッションのみに適していますか? 2番目のユーザーが別のメモリスコープであるサイトにアクセスしています...?
静的変数のスコープはアプリドメイン全体に対するものです。つまり、他のセッションもそれにアクセスできます。異なるサーバーを持つファームがある場合のみ、変数のインスタンスが複数存在します。
静的メンバーのスコープは現在のワーカープロセスのみであり、他の要求が必ずしも同じワーカープロセスで処理されるとは限らないため、ユーザーとは何の関係もありません。
ちなみに、ワーカープロセスの既定の数は1であるため、静的メンバーにはアプリケーション全体のスコープがあると考える人でWebがいっぱいになります。
他の人が述べたように、静的変数は 単一のリクエストではなくアプリケーション全体にグローバルです
シングルトンを個々のリクエストのみにグローバルにするには、HttpContext.Current.Items
辞書。
public class Singleton
{
private Singleton() { }
public static Singleton Instance
{
get
{
if (HttpContext.Current.Items["yourKey"] == null)
HttpContext.Current.Items["yourKey"] = new Singleton();
return (Singleton)HttpContext.Current.Items["yourKey"];
}
}
}
ユーザーベースまたはセッションベースにする必要がある場合は、次のリンクを確認してください。そうでなければ、オタビオが言ったように、シングルトンはドメイン全体で利用可能です。
シングルトンはアプリケーションドメイン全体で使用されます。ユーザーセッション関連のデータを保存する場合は、その目的のために設計されたHttpContext Sessionを使用します。もちろん、操作しようとしているデータを処理するキーと値のペアの方法を考え出すには、おそらくクラス構造を再設計する必要があります。