【发布时间】:2009-03-21 11:02:25
【问题描述】:
我不确定非静态类的一个静态内部类的范围。
在下面的行中,变量 DataContextCreator.Instance(Singleton 模式的一部分)是指向所有 Page 对象/页面请求的同一个 PDataContext 实例,还是每个对象都有自己的实例?
public class Page : System.Web.UI.Page
{
private class DataContextCreator
{
static DataContextCreator() { }
public static readonly PDataContext Instance = new PDataContext(TUtil.GetConnectionString());
}
public PDataContext DataContext
{
get
{
return DataContextCreator.Instance;
}
}
}
我是否必须使用 HttpContext.Current 才能以所需的方式工作,即没有共享 DataContext?如果是这样,还有其他方法吗?
我不确定将静态类修改为私有(就像我所做的那样)是否有效。
谢谢!
编辑: 这是我的解决方案,我现在具有相同的延迟加载功能,但没有静态变量。在这种情况下,我认为我不需要在持有变量周围放置互斥锁。
private PDataContext _DataContext;
private PDataContext DataContext
{
get
{
if (this._DataContext == null)
{
this._DataContext = new PDataContext(TUtil.GetConnectionString());
}
return this._DataContext;
}
}
【问题讨论】:
-
如果代码在页面中,则无需加锁。由于该属性是页面的本地属性,因此只有一个线程可以访问它。
标签: c# asp.net class static scope