同じアプリケーション プールで複数の ASP.NET アプリケーションを実行している場合、クラスの静的変数のインスタンスはいくつになりますか?
- アプリケーション プールごとに 1 つですか?
- アプリケーション プールのワーカー プロセスごとに 1 つですか?
- アプリケーションごとに 1 つですか?
- 他の何か?
コンテキストを与えるだけです:
特に、静的クラス変数に 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 の公式ドキュメントを参照してください。