次のシナリオを考慮してください。
- ASP .NET MVC 3 フレームワークを使用して、完全な Web アプリケーションを作成しました。現在、私のアプリケーションは Web サーバーによって管理されています。
- アプリケーションのサーバー側で HTTP 要求が受信されます。
- シングルトン デザイン パターンを実装するクラスは、サーバー側でインスタンス化されます。
- ブラウザに応答が送信されます。
- アプリケーションのサーバー側で別の HTTP 要求が受信されます。ステップ 2 で使用したシングルトン インスタンスは、サーバー側で引き続き使用できますか?
このページで ASP .NET アプリケーションのライフ サイクルに関する情報を読みました: http://msdn.microsoft.com/en-us/library/ms178473.aspx
しかし、私はまだ私の質問に答えることができません。
今後ともよろしくお願いいたします
VS2010でいくつかのテストを行いました。
私のプロジェクトの主なコンポーネントのリストは次のとおりです。
- Index HttpGet アクション メソッドを含むホーム コントローラー。
- Index アクション メソッドの結果のビュー。
- シングルトン デザイン パターンを実装する SingletonTest クラス。
SingletonTest クラスのコードは次のとおりです。
public class SingletonTest
{
private int counter;
private static SingletonTest instance = null;
public int Counter
{
get
{
return counter;
}
}
public static SingletonTest Instance
{
get
{
if (instance == null)
instance = new SingletonTest();
return instance;
}
}
private SingletonTest()
{
counter = 0;
}
public void IncrementCounter()
{
counter++;
}
}
Index アクション メソッドのコードは次のとおりです。
public ActionResult Index()
{
SingletonTest st = SingletonTest.Instance;
st.IncrementCounter();
return View();
}
ビューのコードは次のとおりです。
@SingletonTest.Instance.Counter
ここで私が従ったテストシナリオ:
- IIS サーバーは、VS2010 によって自動的に起動されています。
- /Home/Index/ URL をリクエストしたところ、値 1 が表示されました。
- /Home/Index/ URL をリクエストしたところ、値 2 が表示されました。
- ...
このテストは、ステップ 1 で作成された SingletonTest インスタンスが、次の要求を処理するときに使用できることを示しています。サーバー上の Web アプリケーションにメモリ空間が割り当てられていると思います。
次に、IIS サーバーを停止し、テスト シナリオを再び実行しました。以前と同じ結果が得られました:1、2、....