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

mor*_*rck 1 c# code-analysis asp.net-mvc-4

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

 IController controller = new ErrorController();
      controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
Run Code Online (Sandbox Code Playgroud)

我试图像这样解决它:

using (IController controller = new ErrorController())
      {
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
      }
Run Code Online (Sandbox Code Playgroud)

但是MVC给了我这个错误:

55  'System.Web.Mvc.IController': type used in a using statement must be implicitly convertible to 'System.IDisposable'
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*yon 5

我不会使用界面,而是将其换成var:

using (var controller = new ErrorController())
      {
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
      }
Run Code Online (Sandbox Code Playgroud)

这将允许将类型推断为ErrorController.

所述IDisposable接口附接至Controller类.但是不存在更高的链条. 这是文档Controller.因此,为了处理,您需要在实现的类上调用它IDisposable.因此,IController 不会起作用.