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 中的跨方法处置模式 的相关文章

  • 尝试获取文件夹的子级时出现 MS Graph API 未知错误

    当尝试使用 Microsoft Graph API 相对路径访问共享点站点驱动器中的特定文件夹时 出现未知错误 这个完全相同的请求在一周前工作正常 但本周再次使用时停止工作 测试结果是我网站驱动器上的一个文件夹 根据OneDrive 开发文
  • X-RequestDigest:运行共享点页面记录的 Web 测试时出现错误

    我已成功记录并重播我的 sharepoint webtest 但一两周后 当我在 Visual Studio 中重播它时 我收到 403 FORBIDDEN 错误 我了解 X RequestDigest 的证书 令牌详细信息已过期 需要在我
  • 如何将选择字段的文本转换为图标?

    救救吧 伙计们 我的共享点页面中有一个选择字段 其中的选项如下 1 Go 2 Warning 3 Stop 现在 我希望它以图标而不是文本的形式出现在列表中 我有一个可用的 jquery 脚本 但需要很长时间才能搜索所有列表中包含的文本 而
  • 检测 SharePoint 文件是否打开

    第一次在这里发帖 如果我偏离了任何指导方针 我深表歉意 这是我的挑战 我有一个保存到 SharePoint 的状态跟踪文件 宏将打开此状态跟踪器 记录一些信息 保存并关闭文件 我试图包含一些代码来检测另一个用户是否打开了该状态文件 否 则当
  • 使用 32 位应用程序中的 SPSite 访问 64 位 SharePoint

    我创建了一个在 32 位模式下运行的批处理作业 因为它使用 32 位 COM 对象 这需要连接到 SharePoint 才能更新列表 它可以在我的开发环境中运行 因为它是完整的 32 位 但在我的测试和生产环境中 我们使用 64 位 Sha
  • SharePoint 列表项权限

    我想以编程方式实现它 以便用户只能看到列表中的特定项目 基本上 在创建项目时运行的工作流程中 我将执行一些操作并通知一些人有关此项目的信息 我还希望它更改项目的权限 以便只有特定用户 根据项目内容在运行时查找 才能读取该项目 有权访问该列表
  • Visual Studio 2010 是否支持 Sharepoint 2007 开发?

    我注意到在 VS2010 beta 2 中 所有模板仅适用于 Sharepoint 2010 这是真的 如果是这样 VIeWS 1 3 至少可以与 VS2010 一起使用吗 据我记得在 SharePoint 拉斯维加斯会议上的会议 新的 很
  • 在终结器中抛出异常以强制执行 Dispose 调用:

    这是我认为推荐的典型 IDisposable 实现 SomeClass Dispose false public void Dispose GC SuppressFinalize this Dispose true protected vi
  • 使用批处理文件或 .NET 代码更改 Web.config 中的值

    我的计算机上有一个 web config 文件 我需要在文件中更改和添加很多内容 我实际上正在使用我的 SharePoint web config 文件 我可以用批处理文件来执行此操作吗 如果可以 我该怎么做 或者我如何使用 VB NET
  • commonModalDialogClose(SP.UI.DialogResult.OK, someValue) 抛出错误

    在 SharePoint 2010 中 我有一个可视化 Web 部件 它使用SP UI ModalDialog showModalDialog 该对话框显示正常 但是当我尝试使用关闭对话框时 SP UI ModalDialog common
  • 将 Apache Camel CMIS 与 Sharepoint 2013 结合使用

    我可以从 Chrome REST 客户端成功访问 Sharepoint 2013 AtomPub 界面 以下 URL 为我提供了我想要的文件 http ourintranet 100 personal myname vti bin cmis
  • 我需要处置 SemaphoreSlim 吗?

    根据文档 a SemaphoreSlim不使用 Windows 内核信号量 是否有任何特殊资源被使用SemaphoreSlim这使得打电话很重要Dispose当 的时候SemaphoreSlim将不再使用 如果您访问AvailableWai
  • 将 Webpart 添加到页面后,“列表工具”选项卡不再可用

    在 SharePoint 2010 中 我已在列表上方添加了我的 Web 部件 标准列表或文档库列表 这并不重要 此后 列表工具 选项卡不可见 经过一番挖掘后 我发现即使我添加标准 SharePoint WebPart 之一 该问题仍然存在
  • 我应该创建自己的对象模型来处理复杂的 Sharepoint 对象吗?

    我正在尝试做一些相当简单的事情 但使用 SharePoint API 似乎是一项几乎不可能完成的任务 我的 SharePoint 数据结构如下 Folder 子文件夹 项目A B项 C项 D项 由于某些奇怪的原因 您无法以您期望的分层方式访
  • SharePoint 404 页面

    最好的位置是在 web config customError 部分中为 SharePoint 设置 404 错误页面 还是网站集 Web 应用程序上有配置设置 请阅读这个博客 http blogs msdn com jingmeili ar
  • 如何在 asp.net 中用空字符串替换字符串中的任何“/ \\ [ ] : | < > + = ; , ? *”字符

    我想用 asp net c 中的空字符串替换字符串中出现的任何以下字符 我正在尝试将其替换为 mystring contains mystring Replace 目前我正在按照上面的方法进行 有没有更干净的方法来做到这一点 感谢致敬 有很
  • SharePoint 发布 HTML 字段控件将相对 URL 转换为绝对 URL

    因此 在对是否应该在面向外部的 SharePoint 网站上使用 CEWP 还是 HTML 字段控件进行了大量研究之后 我们决定使用字段控件 非常感谢 AC 现在 我们遇到了一个问题 我读过的所有博客都说这不应该是一个问题 当我们将相对 U
  • 如何创建链接以打开 Web 部件中的工具部件

    我有一个自定义 Web 部件 当它首次呈现时 我想提供打开修改共享 Web 部件属性的链接 就像我们打开 OOB Web 部件 如内容编辑器或 XML Web 部件 时通常得到的那样 任何人对此都有想法 我正在使用它 但是当我单击它时 它显
  • 反向代理受 NTLM 保护的网站

    如何将请求代理到受 NTLM 保护的网站 例如团队基金会 and 共享点 我不断得到401 身份验证错误 根据这篇 Microsoft TechNet 文章 https www microsoft com technet prodtechn
  • 我想在 64 位模式下运行我的视觉工作室

    我正在 NET 3 5 中编写 Web 服务 在此我必须访问 SharePoint 2010 数据 但 SharePoint 需要我的应用程序使用 64 位模式 Visual Studio 默认处于 32 位模式 如何以 64 位运行 Vi

随机推荐

  • 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