SPContextを渡した場合にDisposeを呼び出すタイミング。クラスライブラリへのサイト?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/75597

  •  10-12-2019
  •  | 
  •  

質問

私はちょうどこれの健全性チェックのビットを探しています!

私は持っている多くのクラスを見ています 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へのポインタですか?サイト。RootWebまたはの別のコピーがありますか SPWeb それは処分する必要がありますか?

私はそれを知っている SPContext.Site.OpenWeb() あなたは電話する必要があります Dispose().

では、上記の使用法はどうですか?

通過します SPSite / SPWeb それをローカル変数に割り当てると、常に同じ変数への参照があります SPContext ?

役に立ちましたか?

解決

あなたの場合 _web あなたがそれを取得しているように処分する必要はありません RootWeb から取得されたwebオブジェクト RootWeb される必要はない。

EIDT

また、もし SPSite コンストラクタにパラメータとして渡されたオブジェクトは、 SPContext, 、それは気分にされる必要はありません。それ以外の場合は、要件に応じて、呼び出されたクラスまたは呼び出し元のクラスのいずれかに配置する必要があります。

他のヒント

spsite.rootwebプロパティでdispose()を明示的に呼び出しません。Dispose Cleanupは、SharePointと.NET Frameworkによって自動的に処理されます。既存のSharePointのカスタマイズのために、明示的なRootWeb Disposeの削除は、SPContext.current.WebがSPSite.RootWebと等価性を持つエッジケース条件を避けるために推奨されます。SPContext(例えば、spcontext.current.site.rootwebおよびgetContextSite(コンテキスト)。のバリエーションからrootwebを配置するときに問題が発生する可能性があります。

詳細については... MSDN

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top