如果将 SPContext.Site 传递给类库,何时调用 Dispose?
题
我只是想对此进行一些健全性检查!
我正在查看许多课程 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 )。
更多请访问...微软软件定义网络