长话短说..。我有一个类(在我的示例场景中,它是一个应用程序页面),它包含对SPList的引用。
public partial class ApplicationPage1 : LayoutsPageBase
{
private static SPList _list = GetSPList();
private static SPList GetSPList()
{
try
{
return SPContext.Current.Web.GetList("/Lists/CoreConfiguration");
}
catch (FileNotFoundException)
{
return null;
}
}
protected void BtnRunQuery_OnClick(object sender, EventArgs e)
{
Debug.WriteLine(_list.Author.Name);
}
}有趣的部分显然是按钮单击事件。因为第一次它总是起作用。也许如果你幸运的话,第二次或第三次成功。但是,它几乎从来没有第四次工作,在这一点上,它抛出一个NullReferenceException。抛出异常的不是列表本身,而是类的一些成员。显然,SPList对象是死的而不是活着的。
因此,很显然,保存对SPList的引用并不是一个好主意。每一次都要遵循设计模式来获取列表吗?每一次请求?
发布于 2013-11-12 17:08:04
不,在SPList字段中保存一个static实例并不是最好的主意。事实上,你不能那么做。正如SPContext.Current的名称所示,它是当前特定时间点上的上下文。简单地说,它是特定于请求的,SPList实例也是如此。
每次需要时,您都必须检索一个新的SPList实例。在内部,它被绑定到SPWeb实例,对于它来说是一样的--它无法在请求之间生存。这里的经验法则是:在只有一个静态SPList实例的情况下,如何区分不同用户的权限?
附带注意:第一个请求成功的原因很简单:您的类在第一次使用时由CLR初始化,这显然是在第一个请求期间。然后,CRL调用类‘’es静态构造函数,该构造函数计算静态成员的值,而且由于SPContext.Current在当时有效,它会接缝工作。
https://stackoverflow.com/questions/19932498
复制相似问题