MVC3: CA2000 - Любой способ разрешить ядро ​​не расположено предупреждение за исключением подавления? - PullRequest
2 голосов
/ 15 ноября 2011

При выполнении анализа кода в моем проекте MVC3, который использует Ninject, я получаю следующее предупреждение:

Предупреждение 1 CA2000: Microsoft.Надежность: в методе «NinjectMVC3.CreateKernel ()», объект «ядро» не расположен вдоль все пути исключения. Вызов System.IDisposable.Dispose для объекта. 'kernel' до того, как все ссылки на него выйдут из области видимости.

Я понимаю, что могу легко подавить сообщение, но мне любопытно, есть ли лучший способ разрешить предупреждение. Статический метод, очевидно, предназначен для возврата «ядра», поэтому его не следует утилизировать.

    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        RegisterServices(kernel);
        return kernel;
    }

Не главная проблема, просто учебное упражнение.

1 Ответ

2 голосов
/ 15 ноября 2011

Проблема, которую CA2000 обнаруживает здесь, заключается в том, что созданный объект будет «осиротеть» без распоряжения, если между его созданием и его возвратом из метода возникнет исключение.В большинстве случаев я бы склонялся к тому, чтобы лечение было хуже, чем проблема для таких сценариев.Однако, если вы хотите исправить это, и использование подхода, предложенного Дарином, не вариант, вот альтернативная версия, которая должна пройти проверку CA2000:

private static IKernel CreateKernel()
{
    var kernel = new StandardKernel();
    try
    {
        RegisterServices(kernel);
        return kernel;
    }
    catch
    {
        kernel.Dispose();
        throw;
    }
}
...