SharePoint 中的跨方法处置模式

2024-04-05

我编写了一个类,可以对 SharePoint 网站的内容进行各种修改。在该类中,我实现了一个惰性解析属性

    private SPWeb rootSite
    {
        get 
        {
            if ( _site == null )
            {
                SPSite site = new SPSite( _url );
                _site = site.OpenWeb();
            }

            return _site;
        }
    }

SPSite和SPWeb都需要处置,根据最佳实践 http://msdn.microsoft.com/en-us/aa973248.aspx文档中这种情况称为交叉方法处置模式...只是他们没有给出有关如何实现模式的处置部分的任何实际建议。

我选择让我的类实现 IDisposable (在那里处理站点和网络),并让调用者通过using条款。这是根据“最佳实践”,还是我应该以不同的方式处理问题?

请注意,我来自严格的引用计数背景,所以如果我对垃圾处理的看法有点偏差,请纠正我。


我认为“跨方法处置模式”是“最佳实践”中最糟糕的。最好使用依赖注入来提供 SPSite 或 SPWeb 引用供您的类使用(也许是通过构造函数)。这样,您的类就没有处置问题,它只使用 SharePoint 上下文。

也就是说,如果您希望继续使用这种模式,请实施IDisposable是正确的做法。但是,您应该跟踪并处置SPSite而不是SPWeb。我可能会这样实现:

public class MyClass : IDisposable
{
    private string _url;
    private SPSite _site;
    private SPWeb _web;

    private SPSite RootSite
    {
        get 
        {
            if ( _site == null )
            {
                _site = new SPSite( _url );
            }

            return _site;
        }
    }

    private SPWeb RootWeb
    {
        get 
        {
            if ( _web == null )
            {
                _web = RootSite.OpenWeb();
            }

            return _web;
        }
    }

    void IDisposable.Dispose()
    {
        if (null != _site)
        {
            _site.Dispose();
        }
    }
}

注意_web将通过调用自动处置_site.Dispose().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SharePoint 中的跨方法处置模式 的相关文章

随机推荐

  • Thymeleaf - 如何在 Thymeleaf 标签“th:if”中将字符串与 html 中的请求参数进行比较?

    如何将 Thymeleaf 标签 th if 中的字符串与 html 中的请求参数进行比较 现在我正在使用这个 div class error p class errorMsg span span p div 但不幸的是 它不起作用 它不起
  • Knockout js 大量自定义绑定

    在绑定不存在的情况下 处理大量自定义绑定的好方法是什么 假设我的 html 表达式绑定到 image url 如下所示 span title Company Logo span 然而 image url 绑定很可能不可用 在这种情况下 我只
  • 如何获取所有子文件夹及其文件 - UWP

    我在桌面上有一个名为student names 的固定文件夹 它包含子文件夹 每个子文件夹都包含其文件 现在我想将这些子文件夹及其相应的文件名存储在数组列表中 这怎么可能 UWP 应用程序不能directly访问文件夹 应用程序文件夹除外
  • Locust 95 百分位数高于最大值

    有时 当我在某些场景下运行 Locust 时 95 百分位数值会超过最大值 据我了解 95 意味着 95 的请求花费的时间比这个少 那么最大值怎么会小于 95 呢 我在这里做错了什么 我还发现只有当请求数量非常少 例如 15 个或更少 时才
  • 使用 CakePHP 2 的特征和命名空间的正确方法是什么?

    我正在使用 CakePHP 2 4 5 和 PHP 5 5 并且想使用一个特征 我在 Utility VariablesTrait php 中有一个称为VariablesTrait 为了利用命名空间 我给了它一个命名空间App Utilit
  • Json序列化Swift 3类型错误

    我使用以下代码从推送通知接收自定义数据 但收到以下错误 无法将类型 NSArrayM 0x1b0776cf0 的值转换为 NSDictionary 0x1b0777128 在下面一行 let jsonData try JSONSeriali
  • 网页查看历史记录

    WebView中什么时候将页面添加到前进后退列表中 我有 webview setMaintainsBackForwardList YES 但是 webview canGoBack 在我执行了几个 webview mainFrame load
  • Gtk Widget 到 Winform

    是否可以使用 System Windows Forms 将 Gtk 小部件嵌入到应用程序中 谢谢 两个工具包都使用自己单独的 UI Mainloop 来处理事件 例如鼠标移动 按钮按下等 因此 将两者混合实际上是不可能的 尽管几年前 Gtk
  • 使用多个参数记录

    我目前正在开发一个程序 其中我必须将所有输出写入日志文件 我需要编写一个日志方法 它应该按照我指定的顺序给出一个输出 其中包含级别 消息 对象值 另一条消息 一个整数值 另一条消息和另一个整数值 我似乎找不到执行此操作的日志方法 我在用Ja
  • 如何升级SQLite版本?

    我正在开发我的第一个应用程序 并使用以下代码查看我的 SQLite 版本 Cursor cursor SQLiteDatabase openOrCreateDatabase memory null rawQuery select sqlit
  • 如何设置 Eclipse 项目引用

    我的工作区中有一个 Web 项目 它依赖于工作区中的 java 项目 在项目引用中 我使我的 Web 项目引用了 java 项目 但仍然存在构建错误 表明我的 java 项目中的类未被我的 Web 项目引用 一个答案 这不是对您的问题的直接
  • Eclipse 找不到 MinGW。为什么?

    我都正确安装了 但是无论我是否正确设置编译器路径都没关系 因为它找不到 gcc 和 g 我用资源管理器检查过 它们位于正确的位置 我尽了一切努力 甚至以向后兼容模式并以管理员身份运行 Eclipse 编辑 如果 Eclipse 不能至少像用
  • 如何从 Javascript 或 Jquery 数组中选择随机值? [复制]

    这个问题在这里已经有答案了 我试图显示数组中的 3 个随机值 以下脚本仅从 javaScript 数组返回单个项目 var arrayNum One two three four five six seven eight nine var
  • 如何使用SessionState获取剩余会话超时时间?

    是否可以使用 ASP net 中的 sessionState 获取剩余会话超时 这是我的 webconfig 文件中的 sessionState 代码
  • 如何输出未包含在分组依据中的属性及其计数

    我在这里想要实现的是 我希望从该 LINQ 查询返回具有两个属性的列表 billNo 和同一 fromDate 上导入代码出现的次数 因此 这里我们的 billNo 1 和 2 都具有相同的导入代码 该导入代码在同一日期 01 01 202
  • 如何在 macOS 上将 libxml2 与 python 一起使用?

    我在 OSX Lion 上 安装了 libxml2 默认情况下 并且安装了 python 默认情况下 但它们不互相通信 在 Lion 上实现此功能的最简单方法是什么 python c import libxml2 Traceback mos
  • 在Ubuntu 18.04、Python 3.6.7 64位、Mono 5.16上安装pythonnet失败

    我想在 Ubuntu 上安装 pythonnet 但失败了 这就是我到目前为止所尝试的 usr bin python3 m pip install U pythonnet user Error Collection pythonnet Us
  • DOM 中两个元素之间的距离(以 px 为单位)

    如何获取 DOM 中两个元素之间的距离 我正在考虑使用获取边界客户端矩形 https developer mozilla org en US docs Web API Element getBoundingClientRect 但我不知道如
  • C# POCO 的 DbGeography 替代方案

    我正在编写一个应用程序 我需要查询某个位置半径内的记录 我一开始在 PCO 上只使用了一对经纬度属性 但意识到 SQL 中的空间搜索是针对地理列类型完成的 该地理列类型可转换为 POCO 中的 DbGeography 在另一篇 SO 帖子中
  • SharePoint 中的跨方法处置模式

    我编写了一个类 可以对 SharePoint 网站的内容进行各种修改 在该类中 我实现了一个惰性解析属性 private SPWeb rootSite get if site null SPSite site new SPSite url