У меня есть вопрос о синглетонах, запущенных в IIS (6,7,7.5) и веб-приложении ASP.NET 4.0 (приложение MVC3, в частности).
У меня есть одноэлементный объект в моем проекте, которыйДоступ и использование в 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;
}
}