Как настроить resharper для предупреждения об использовании / одноразовых инструкциях? [Дубликат]

У меня есть другая перспектива ответить на это.

При работе на разных уровнях, например, в приложении MVC, контроллеру нужны службы для вызова бизнес-операций. В таких сценариях контейнер инжекции зависимостей может использоваться для инициализации служб, чтобы исключить исключение NullReferenceException. Это означает, что вам не нужно беспокоиться о проверке нулевого значения и просто вызвать службы с контроллера, как будто они всегда будут доступны (и инициализированы) как одиночный или прототип.

public class MyController
{
    private ServiceA serviceA;
    private ServiceB serviceB;

    public MyController(ServiceA serviceA, ServiceB serviceB)
    {
        this.serviceA = serviceA;
        this.serviceB = serviceB;
    }

    public void MyMethod()
    {
        // We don't need to check null because the dependency injection container 
        // injects it, provided you took care of bootstrapping it.
        var someObject = serviceA.DoThis();
    }
}
33
задан serg10 19 September 2008 в 17:30
поделиться

5 ответов

Правильный автоматический анализ Dispose требует DFA (анализ потока данных) глобальным способом. Маловероятно, что вы создаете объект IDisposable и не вызываете на нем никакого метода и не передаете его в качестве аргумента. Если одноразовый объект передается другим методам (включая вызов его членов, когда «это» неявно передается), инструмент должен проанализировать, не вызывается ли Dispose внутри, или что этот объект не хранится где-то для последующего удаления.

Тем не менее, наивная реализация проверки того, действительно ли располагаемый объект фактически размещен с конструкцией «использования» или каким-либо другим способом, даст слишком много ложных срабатываний и сделает анализ бесполезным.

27
ответ дан Ilya Ryzhenkov 31 August 2018 в 09:42
поделиться
  • 1
    Не уверен, почему вы проголосовали за Илья, имеет смысл для кого-то, знакомого с R #, и того, как он работает, чтобы прокомментировать вопрос о R # – Shaun Austin 19 September 2008 в 15:34
  • 2
    Я не знаю, я тоже проголосовал за другой вопрос, связанный с ReSharper. Похоже, кто-то меня не любит, лично. Или ненавижу ReSharper :) – Ilya Ryzhenkov 19 September 2008 в 15:37
  • 3
    Ну, я люблю его, и здорово, чтобы люди относились к публикации продукта в StackOverflow. Ура! – Shaun Austin 19 September 2008 в 15:42
  • 4
    Разумеется, это может вызвать предупреждение только в том случае, если переменная была привязана к одному методу, не проверяя, была ли она расположена где-то в другом месте. – KyleMit 26 December 2013 в 06:00
  • 5
    Я понимаю ваш аргумент, Илья. Тем не менее, похоже, что вы можете получить много «взрыва» для своего доллара ». путем идентификации конкретных, обычно используемых методов, которые, как известно, производят IDisposable s, которые не используют себя в своих собственных методах. Неспособность избавиться от HttpResponseMessage может вызвать критические таймауты в других частях кода, и редко преднамеренно использовать await SendAsync() без оператора using. В этих редких случаях люди могут использовать комментарии Решарпера и такие, чтобы показать, что они знают, что они делают. – StriplingWarrior 30 September 2015 в 21:50

См. это сообщение в блоге для некоторых трюков для тестирования для Dispose() в DEBUG. В принципе, напишите деструктор только для DEBUG, который утверждает, что вы были удалены.

2
ответ дан Jay Bazuzi 31 August 2018 в 09:42
поделиться

Недовольство существующими методами, я создал свой собственный: EyeDisposable . Это прибор для ИИ, поэтому он должен улавливать много утечек, не попавших под статический анализ. Он все еще находится на ранней стадии, приветствуются inpuit.

5
ответ дан kizzx2 31 August 2018 в 09:42
поделиться

Вы можете посмотреть на FXCop для этого: http://msdn.microsoft.com/en-us/library/ms182328 (VS.80) .aspx

Жаль, что R # не справляется с этим, даже если это предупреждение для полей вашего класса и / или переменных, которые вы создаете.

2
ответ дан user154380 31 August 2018 в 09:42
поделиться

Вы можете создать небольшую надстройку для R #, которую вы могли бы запустить внутри редактора кода, который сканирует код и обновляет анализ кода, чтобы отразить то, что вы являетесь объектом, у которого отсутствует структура, которую вы только что описали.

Я бы заглянул в архитектуру плагина R #, если вы решите пойти по этому маршруту.

2
ответ дан user15749 31 August 2018 в 09:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: