SPContextを渡した場合に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へのポインタですか?サイト。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を配置するときに問題が発生する可能性があります。
詳細については...