SPList 实例成员抛出 NullReferenceException



长话短说...我有一个类(在我的示例场景中它是一个应用程序页面),其中包含对 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);
    }
}

有趣的是按钮点击事件显然。因为第一次它总是有效。也许如果你幸运的话,它可以第二次或第三次工作。但它几乎从不工作第 4 次,此时它会抛出 NullReferenceException。抛出异常的不是列表本身,而是类的一些成员。显然,SPList对象比活的更死。

因此,显然保留对SPList的引用不是一个好主意。设计模式是否每次都遵循此处并获取列表?在每个请求上?

不,在static字段中保存SPList实例并不是最好的主意。事实上,你可能不会那样做。正如SPContext.Current的名字所表明的,它是非常特定的时间点的当前上下文。简而言之(简化),它是特定于请求的,SPList实例也是如此。

每次需要时,都必须检索新的SPList实例。在内部,它绑定到SPWeb实例,对于它是一样的 - 它无法在请求中生存。这里的经验法则是:如果您只有一个静态SPList实例,您将如何区分不同用户的权限?


旁注:它适用于第一个请求的原因很简单:您的类在第一次使用时由 CLR 初始化,这显然是在第一个请求期间。然后,CRL 调用类的静态构造函数,该构造函数计算静态成员的值,并且由于SPContext.Current在当时有效,因此它可以正常工作。

相关内容

  • 没有找到相关文章

最新更新