Scope of static inner class in ASP.NET
我不确定非静态类的一个静态内部类的范围。
在下面的几行中,变量dataContextCreator.Instance(单件模式的一部分)是指向所有页面对象/页面请求的同一pDataContext实例,还是每个对象都有自己的实例?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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(正如我所做的那样)会起作用。
谢谢!
编辑:这是我的解决方案,我现在有相同的延迟加载能力,但没有静态变量。在这种情况下,我不需要在保持变量周围放置互斥锁。
1 2 3 4 5 6 7 8 9 10 11 12 | private PDataContext _DataContext; private PDataContext DataContext { get { if (this._DataContext == null) { this._DataContext = new PDataContext(TUtil.GetConnectionString()); } return this._DataContext; } } |
每一页都是一样的。静态变量是一个静态变量,但它是嵌套的。(泛型使事情变得"有趣",因为
如果要使某个对象依赖于EDOCX1的实例(2),它需要是
由于
要使单个实例成为页面实例的本地实例,您需要将引用存储在页面上下文中:
1 2 3 4 5 6 7 8 9 10 | public PDataContext DataContext { get { PDataContext result = HttpContext.Current["PData"]; if (result == null) { result = new PDataContext(TUtil.GetConnectionString()); HttpContext.Current["PData"] = result; } return result; } } |
嵌套类纯粹是为了方便命名(以及一些修改器更改(私有等))。在行为方面,它们实际上与常规(顶级)类是相同的。所以