2009-05-04 12 views
2

SharePointでWebパーツを作成するときに、using句でIDisposableを実装していますか?または、あなたのオブジェクトをtry/catch/finallyに処分しますか?どちらも?依存しますか?どうしてあなたは他の人を選んだのですか?SharePointオブジェクトで使い捨てを使用する(Webパーツ)

背景:

私はIDisposableを実装していません継承されたコードのビットに取り組んでいますので、私は問題を修正するまで読んできました。 usingを推奨していますが、その後、多くの場合、それはusingを使用することをお勧めではないことを言うようになっ

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

:MSDNは、「ベストプラクティス」をカバーする素晴らしい記事があります。

答えて

5

私は記事にabiguityを理解することができます - (特定のオブジェクトを配置し、それがWebパーツの開発に来るとき

:)本当の答えは、泥のように明確である(または一般にSharePointのAPIで開発)特にSPOMオブジェクト)は、オブジェクトを正しくインスタンス化しないと予測できない結果を生じます。

特に、現在のコンテキストからSPSiteまたはSPWebへのオブジェクト参照を取得し、それを破棄しようとすると(using節またはtry/finallyを使用)、SharePointからオブジェクト参照エラーが発生しますスタック。

SPオブジェクト(SPSite、SPWebなど)を処分する正しい方法は、URLを使用してサイトから新しいSPオブジェクトを取得することです(コンテキストを取得するのではなく)。例:ここでは

using (SPSite siteCollection = new SPSite("http://your_site_url")) 
{ 
    using (SPWeb site = siteCollection.OpenWeb("News")) 
    { 
    //do stuff with your news web 
    } 
} 

は、あなたがそれを使用しようとすると、オブジェクト参照エラーをスローするコードの例です。

using(contextSite = SPControl.GetContextSite(Context)) 
{ 
    using (SPWeb site = siteCollection.OpenWeb("News")) 
    { 
    //do stuff with your news web 
    } 
} 

エラーが使用してブロックの間に発生しますが、しませんSharePointがサイトで内部的に何かをしようとすると、後で下流で発生します。

一般的な使い方では、IDisposableオブジェクトがある場合はtry/finallyを使って()を使うのが大好きです。 try/finallyを選択する唯一の方法は、IDisposableでないオブジェクトの割り当てを解除するために余分なロジックを必要とする場合です。

希望すると便利です。

+0

(+1)確かに今はあまり泥ではありません、ありがとう! – vinny

関連する問題