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 回答