我只是想对此进行一些健全性检查!

我正在查看许多课程 SPSite 或者 SPWeb 作为类的构造函数。

该类是使用实例化的 SPContext.Site 作为 SPSite 参数

例如

public MyClass {
  SPWeb _web;
  public MyClass(SPSite site) {
    _web = site.RootWeb;
  }
  // Other methods that make use of _web
}

应该 _web 被处置?_web 只是指向 SPContext.Site.RootWeb 的指针还是有另一个副本 SPWeb 需要处理掉吗?

我知道与 SPContext.Site.OpenWeb() 你应该打电话 Dispose().

那么上面的用法呢?

会路过 SPSite / SPWeb 因为将它分配给局部变量总是只具有对相同变量的引用 SPContext ?

有帮助吗?

解决方案

在你的情况下 _web 不需要丢弃,因为您是从 RootWeb 以及从以下位置检索的 Web 对象 RootWeb 不需要处置。

电子信息处理技术

另外,如果 SPSite 作为参数传递给构造函数的对象派生自 SPContext, ,不需要丢弃。否则,需要根据需要在被调用类中或从调用类中进行处理。

其他提示

不要在 SPSite.RootWeb 属性上显式调用 Dispose()。处置清理将由 SharePoint 和 .NET 框架自动处理。对于现有 SharePoint 自定义,建议删除显式 RootWeb Dispose,以避免出现 SPContext.Current.Web 与 SPSite.RootWeb 相等的边缘情况。当从 SPContext 的任何变体获取 RootWeb 时,处理 RootWeb 时可能会出现问题(例如:SPContext.Site.RootWeb、SPContext.Current.Site.RootWeb 和 GetContextSite(Context).RootWeb )。

更多请访问...微软软件定义网络

许可以下: CC-BY-SA归因
scroll top