CA2000和依赖注入

时间:2012-12-21 15:46:56

标签: c# asp.net-mvc-3 code-analysis

我正在使用一个相当简单的DI模式将我的数据存储库注入到我的控制器类中,并且我在每个模式下获得CA2000代码分析警告(在丢失范围之前调用对象)。我知道为什么警告正在发生,并且通常可以弄清楚如何解决它,但在这种情况下我无法弄清楚

  1. 如何在对象创建和返回方法之间抛出异常,或者
  2. 我可以放置try/finally块来摆脱错误。
  3. 在我放弃并抑制所有地方的警告信息之前,是否有更好的方法来实现同样的效果,而不会产生潜在的未曝光物体?

    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();
                }
            }
        }
     }
    

2 个答案:

答案 0 :(得分:1)

如果您使用的是ASP.Net MVC,您可以让您的控制器实现IDisposable,管道将负责为您处理它。请参阅ASP MVC: When is IController Dispose() called?

答案 1 :(得分:0)

您的存储库实现了IDisposable。使您的控制器也实现IDisposable,并在dispose方法中清理您的存储库。