C# &引用;CA2000在失去作用域之前处理对象”;在控制器上
我在代码分析中有一个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
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
。也许,这可能是另一个问题的基础?