我有一个关于在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)
归档时间: |
|
查看次数: |
4198 次 |
最近记录: |