【发布时间】:2011-10-09 20:22:30
【问题描述】:
我知道单例模式的工作原理,但我怀疑它在网络范围内的工作原理。不是自然应要求吗?
发出请求并实例化单例并且请求已结束。单身被毁了?如果是,为什么有些人要明确地让单例进入请求范围?如果没有,会发生什么?单例保留在内存中,并为每个请求创建一个新的?
更新:
当我说“为什么有些人要明确地让单例进入请求范围”时,例如使用 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
}
【问题讨论】:
-
如果你还没有被告知,几乎所有单身人士都是邪恶的。
-
什么语言/平台/框架?
标签: .net design-patterns web-applications singleton