C# &引用;CA2000在失去作用域之前处理对象”;在控制器上

C# &引用;CA2000在失去作用域之前处理对象”;在控制器上,c#,asp.net-mvc-4,code-analysis,C#,Asp.net Mvc 4,Code Analysis,我在代码分析中有一个CA2000警告。但我不知道如何解决这个问题,也不知道为什么这是个问题。这是失败的代码: IController controller = new ErrorController(); controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData)); 我试着这样解决它: using (IController controller = new ErrorCont

我在代码分析中有一个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'

我可以抑制错误,但我想知道是什么导致了错误并解决了问题。

我不使用该接口,而是将其替换为
var

using (var controller = new ErrorController())
      {
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
      }
这将允许将类型推断为
ErrorController


IDisposable
接口连接到
Controller
类。但不存在更高层次的链。因此,为了进行dispose,您需要在实现
IDisposable
的类上调用它。因此,
IController

我不使用该接口,而是将其替换为
var

using (var controller = new ErrorController())
      {
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
      }
这将允许将类型推断为
ErrorController


IDisposable
接口连接到
Controller
类。但不存在更高层次的链。因此,为了进行dispose,您需要在实现
IDisposable
的类上调用它。因此,
IController

您的
使用
语句将
ErrorController
向上转换为
IController
,这可能没有实现
IDisposable
(而
ErrorController
除了
IController
之外,还实现了
IDisposable
)。更改为:

using (var controller = new ErrorController())
或:


您的
using
语句将
ErrorController
向上投射到
IController
,该控件可能未实现
IDisposable
(而
ErrorController
除了
IController
之外,还实现了
IDisposable
)。更改为:

using (var controller = new ErrorController())
或:


ErrorController
IDisposable?ErrorController是MVC控制器是
ErrorController
IDisposable?ErrorController是MVC控制器如果我喜欢你的建议。它告诉我这个错误55'System.Web.Mvc.ControllerBase.Execute(System.Web.Routing.RequestContext)'由于其保护级别而无法访问这是由于您试图实现的不同问题造成的。我假设此代码是路由,但是
ControllerBase
Controller
Execute
方法标记为
protected
。也许,这可能是另一个问题的基础?如果我真的喜欢你的建议。它告诉我这个错误55'System.Web.Mvc.ControllerBase.Execute(System.Web.Routing.RequestContext)'由于其保护级别而无法访问这是由于您试图实现的不同问题造成的。我假设此代码是路由,但是
ControllerBase
Controller
Execute
方法标记为
protected
。也许,这可能是另一个问题的基础?