ASP.NET站点中静态变量的范围

Eri*_*oen 13 .net c# asp.net

如果在同一个应用程序池中运行多个ASP.NET应用程序,那么我将拥有一个类的静态变量实例数量?

  1. 每个应用程序池一个?
  2. 每个应用程序池工作进程一个?
  3. 每个申请一个?
  4. 别的什么?

只是给出一些背景:

我正在考虑一个ServiceLocator实现,它在一个静态类变量中包含一个UnityContainer.问题是,在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;
        }

    }
Run Code Online (Sandbox Code Playgroud)

如果我从在同一个应用程序池中运行的两个不同的Web应用程序运行它,通常在Application_Start中,它会在第二次调用时抛出异常吗?它总会引发异常吗?它永远不会抛出异常吗?它会在某些配置中引发异常吗?

更新:我知道每个应用程序域将有一个静态变量实例.因此,问题可以改为"如果在同一个应用程序池中运行多个ASP.NET应用程序,我将拥有多少个应用程序域?"

我一直在寻找很多,但没有找到任何权威的参考.任何帮助表示赞赏,最好参考官方Microsoft文档.

Jam*_*mes 15

如果在同一个应用程序池中运行多个ASP.NET应用程序,我将拥有多少个应用程序域?

每个应用程序池可以有多个工作进程,每个工作进程将运行不同的应用程序实例.应用程序的每个实例都有一个单独的AppDomain- 所以原始问题的答案是每个应用程序实例一个.