私はかなり単純なDIパターンを使用して自分のコントローラクラスにデータリポジトリを注入していますが、CA2000コード分析警告(スコープを失う前にオブジェクトを廃棄する)が表示されています。私は警告が起こっている理由を知っており、通常はそれを修正する方法を見つけ出すことができますが、この場合には、私は、オブジェクトの作成と返すメソッドの間にスローされた例外のいずれかの可能性があるどのようにCA2000と依存性注入
- を把握することはできません、または
- 私は
try/finally
ブロックを入れてエラーを取り除くことができます。
警告メッセージを全面的に放棄して表示しないようにする前に、潜在的な不在オブジェクトにならない同じ効果を達成するより良い方法がありますか?
public class AccountController : Controller
{
public AccountController()
: this(new SqlDataRepository())
{
}
public AccountController (IDataRepository db)
{
this.db = db ?? new SqlDataRepository();
// Lots of other initialization code here that I'd really like
// to avoid duplicating in the other constructor.
}
protected override void Dispose(bool disposing)
{
if (disposing && (this.db != null))
{
IDisposable temp = this.db as IDisposable;
if (temp != null)
{
temp.Dispose();
}
}
}
}
いずれにしても、 'Dispose'メソッドの'(this.db!= null) 'は、数行の行をもう一度ヌルチェックすると冗長です。また、 'Dispose'メソッドの最後に' base.Dispose(disposing) 'を呼んで、' Controller'の 'Dispose'も適切にクリーンアップしていることを確認することもできます。 –