6

非常に単純なDIパターンを使用して、データリポジトリをコントローラークラスに挿入していますが、すべてのクラスでCA2000コード分析警告(スコープを失う前にオブジェクトを破棄する)が表示されます。警告が発生している理由はわかっており、通常は修正方法を理解できますが、この場合は理解できません

  1. オブジェクトの作成とメソッドの戻りの間に例外がスローされる可能性があるか、または
  2. 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();
            }
        }
    }
 }
4

2 に答える 2

1

ASP.Net MVC を使用している場合は、コントローラーに を実装させることができIDisposable、パイプラインがそれを破棄します。ASP MVCを参照してください: IController Dispose() はいつ呼び出されますか? .

于 2012-12-21T16:01:05.233 に答える
0

リポジトリは IDisposable を実装しています。コントローラーにも IDisposable を実装させ、dispose メソッドでリポジトリをクリーンアップします。

于 2012-12-21T15:59:15.993 に答える