14

同じアプリケーション プールで複数の ASP.NET アプリケーションを実行している場合、クラスの静的変数のインスタンスはいくつになりますか?

  1. アプリケーション プールごとに 1 つですか?
  2. アプリケーション プールのワーカー プロセスごとに 1 つですか?
  3. アプリケーションごとに 1 つですか?
  4. 他の何か?

コンテキストを与えるだけです:

特に、静的クラス変数に UnityContainer を保持する ServiceLocator 実装について考えています。問題は、ServiceLocator にコンテナーを登録する複数のアプリが互いに干渉するかどうかです。

アプリは .NET 4.0 上の IIS 7.5 で実行されていますが、それによって違いが生じる場合があります。

サンプルコード (簡略化)

public static class ServiceLocator
    {
        private static IUnityContainer _container;

        public static void Initialize(IUnityContainer container)
        {
            if (_container != null)
            {
                throw new ApplicationException("Initialize should only be called once!");
            }
            _container = container;
        }

    }

同じアプリケーション プール (通常は Application_Start) で実行される 2 つの異なる Web アプリケーションからこれを実行すると、2 回目の呼び出しで例外がスローされますか? 常に例外をスローしますか? 例外をスローすることはありませんか?一部の構成で例外をスローしますか?

更新:アプリケーション ドメインごとに静的変数のインスタンスが 1 つあることはわかっています。したがって、この質問は、「同じアプリケーション プールで複数の ASP.NET アプリケーションを実行している場合、アプリケーション ドメインはいくつあるでしょうか?」と言い換えることができます。

私はいろいろ調べましたが、これに関する信頼できる参考文献は見つかりませんでした。できれば Microsoft の公式ドキュメントを参照してください。

4

3 に答える 3