2011-11-15 6 views
2

Ninjectを使用して、私のMVC3プロジェクトにコード分析を実行しているとき、私は次の警告受信:MVC3:CA2000 - カーネルを解決する方法はありませんでした。

警告1 CA2000:Microsoft.Reliability:方法 'においてNinjectMVC3.CreateKernel()'、オブジェクトのカーネルを 'です に沿ってすべての例外パスに沿って配置されません。 System.IDisposable.Disposeをオブジェクト 'kernel'に呼び出す前に、すべての参照が有効範囲外です。

警告を簡単に抑制することはできますが、警告を解決するには、より良い方法があるかどうかが不思議です。静的メソッドは明らかに 'kernel'を返すことを意図しているので、それを破棄してはいけません。

大きな問題ではなく、単なる学習課題です。

答えて

2

ここでCA2000が検出している問題は、インスタンス化されたオブジェクトが、そのインスタンス化とメソッドからの復帰の間に例外がスローされると、処理されずに「孤立して」いるということです。ほとんどの場合、私はそのようなシナリオの問題よりも治癒が悪いと考える傾向があります。しかし、それを修正したいと思ってDarinが提案したアプローチの使用は選択肢ではありません。ここではCA2000検証に合格する代替バージョンがあります:

private static IKernel CreateKernel() 
{ 
    var kernel = new StandardKernel(); 
    try 
    { 
     RegisterServices(kernel); 
     return kernel; 
    } 
    catch 
    { 
     kernel.Dispose(); 
     throw; 
    } 
} 
関連する問題