Singleton在Asp.Net Web应用程序上运行

Joh*_*ohn 5 c# asp.net iis

我有一个关于在IIS(6,7,7.5)和ASP.NET 4.0 Web应用程序(特定的MVC3应用程序)中运行的Singletons的问题.

我的项目中有一个单例对象,可以在global.ascx,application_start以及应用程序中的其他一些地方访问和使用.

我担心的是,这个单例需要在每个实例场景中可访问.但是,由于IIS本质上是托管进程,因此单例将成为应用程序所有实例中的同一对象吗?

如果我使用[ThreadStatic]关键字,它是否在应用程序池级别分开?

最后,有没有办法,我可以保证单例只是我的应用程序的每个实例的单例.即如果我在1个网站上运行我的应用程序,但在5个虚拟目录中,则有5个单例实例,或者如果我在同一个应用程序池中的5个不同网站上运行我的网站.

希望这很清楚,如果你想看到单身对象,我在下面粘贴了它的一般概念.

public sealed class Singleton : IDisposable
{
    [ThreadStatic]
    private static volatile Singleton _instance;
    [ThreadStatic]
    private static readonly object _syncRoot = new object();

    public bool IsReleased { get; private set; }

    public Singleton()
    {
        IsReleased = false;
    }

    public static Singleton Instance
    {
        get
        {
            if (_instance == null)
            {
                lock (_syncRoot)
                {
                    if (_instance == null)
                        _instance = new Singleton();
                }
            }

            return _instance;
        }
    }

    public void Dispose()
    {
        IsReleased = true;
        Singleton._instance = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

Sti*_*ack 0

使用 IIS,您无法控制请求运行的线程。如果您确实需要这种应用程序实例级锁定,您可能需要研究较重的锁定对象(互斥锁、监视器等)并为每个应用程序创建一个。