Я знаю, как работает шаблон Singleton, но я сомневаюсь, как он работает в веб-области. Разве не по запросу?
Запрос сделан, экземпляр синглтона создан и запрос завершен. Синглтон был уничтожен? Если да, почему некоторые люди делают так, чтобы синглтон явно указывал в области запроса Если нет, что происходит? Одиночка остается в памяти, и для каждого запроса создается новый?
Обновление:
Когда я говорю «почему некоторые люди делают так, чтобы синглтон явно указывал в области запроса», например, использую Ninject, я должен это сделать:
Bind<ISession>().To(SessionSingleton.Instance).InRequestScope();
Обновление 2:
using System;
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
Обновление 3:
Мой DbContext
- это Синглтон? Я думаю, нет, мой DbContextFactory
одноэлементный, НО мой DbContext
в этом случае будет уничтожен, когда запрос закончится?
public class DbContextFactory
{
#region Fields
private static volatile DbContextFactory _dbContextFactory;
private static readonly object SyncRoot = new Object();
public DbContext Context;
#endregion
#region Properties
public static DbContextFactory Instance
{
get
{
if (_dbContextFactory == null)
{
lock (SyncRoot)
{
if (_dbContextFactory == null)
_dbContextFactory = new DbContextFactory();
}
}
return _dbContextFactory;
}
}
#endregion
#region Methods
public DbContext GetOrCreateContext()
{
if (this.Context == null)
this.Context = new DbContext(ConfigurationManager.AppSettings["DefaultConnectionString"]);
return Context;
}
#endregion
}