首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对SharePoint对象(SharePoint部件)使用Disposable

对SharePoint对象(SharePoint部件)使用Disposable
EN

Stack Overflow用户
提问于 2009-05-04 15:26:07
回答 1查看 789关注 0票数 2

在用SharePoint编写web部件时,您是否通过using子句实现IDisposable?或者,您是否在try/catch/finally中处置对象?两者都有?视情况而定?你为什么选了一个而不是另一个?

背景:

我正在处理一些继承的代码,这些代码没有实现IDisposable,所以我一直在阅读以纠正这个问题。MSDN有一篇很好的文章介绍了“最佳实践”:

http://msdn.microsoft.com/en-us/library/aa973248.aspx

这建议使用using,但接着说,在许多情况下,使用using是不可取的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-05-04 16:02:15

我可以理解这篇文章中的巧妙之处--真正的答案就像泥巴一样清晰:)

当涉及到web部件开发(或一般使用SPOM进行开发)时,如果您没有正确地实例化您的对象,那么释放某些对象(特别是SharePoint对象)将产生不可预知的结果。

特别是,如果您从当前上下文获取对SPSite或SPWeb的对象引用,并尝试处理它(使用using子句或try/finally),您将从SharePoint堆栈获得对象引用错误。

处理SP对象(SPSite、SPWeb等)的正确方法是使用URL从站点实例化一个新的SP对象(而不是使用上下文获取它)。例如:

代码语言:javascript
复制
using (SPSite siteCollection = new SPSite("http://your_site_url"))
{
  using (SPWeb site = siteCollection.OpenWeb("News"))
  {
    //do stuff with your news web
  }
}

下面是一个代码示例,如果您尝试使用它,它将抛出对象引用错误:

代码语言:javascript
复制
using(contextSite = SPControl.GetContextSite(Context))
{
  using (SPWeb site = siteCollection.OpenWeb("News"))
  {
    //do stuff with your news web
  }
}

该错误不会在using块期间发生,但会在后续SharePoint尝试在站点内部执行某些操作时发生。

就一般用法而言,如果您有一个IDisposable对象,我非常喜欢使用()而不是try/finally。只有当我需要围绕释放非IDisposable对象做额外的逻辑时,我才会选择try/finally。

希望这能有所帮助!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/820577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档