1

コード分​​析に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'

エラーを抑えることもできますが、エラーの原因を知り、問題を解決したいと思います。

4

2 に答える 2

5

インターフェイスを使用する代わりに、次のように交換しますvar

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

これにより、型を として推論できるようになりますErrorController

IDisposableインターフェイスはControllerクラスにアタッチされています。しかし、チェーンの上位には存在しません。 のドキュメントはこちらですController。したがって、破棄するには、を実装するクラスで呼び出す必要がありますIDisposable。したがって、動作しIController ません

于 2013-03-12T09:23:26.147 に答える
4

あなたのusingステートメントは を にアップキャストしErrorControllerていますがIController、これはおそらく実装されていません(IDisposable一方、はに加えて実装されています)。次のいずれかに変更します。ErrorController IDisposableIController

using (var controller = new ErrorController())

または:

using (ErrorController controller = new ErrorController())
于 2013-03-12T09:24:45.293 に答える