控制器上的“CA2000在丢失范围之前处理对象”

时间:2013-03-12 09:17:39

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

我在代码分析中遇到了CA2000警告。但我无法找到如何解决它或为什么它是一个问题。这是失败的代码:

 IController controller = new ErrorController();
      controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));

我试图像这样解决它:

using (IController controller = new ErrorController())
      {
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
      }

但是MVC给了我这个错误:

55  'System.Web.Mvc.IController': type used in a using statement must be implicitly convertible to 'System.IDisposable'

我可以压制错误,但我想知道导致错误的原因并解决问题。

2 个答案:

答案 0 :(得分:5)

我会将其换成var

,而不是使用界面
using (var controller = new ErrorController())
      {
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
      }

这将允许将类型推断为ErrorController

IDisposable接口附加到Controller类。但是不存在更高的链条。 Here is the docs for Controller。因此,为了处理,您需要在实现IDisposable的类上调用它。因此,IController won't work

答案 1 :(得分:4)

您的using声明正在将ErrorController提升为IController,这可能不会实现IDisposable(而ErrorController 会<除IDisposable之外,/ em>实施IController。改为:

using (var controller = new ErrorController())

或者:

using (ErrorController controller = new ErrorController())