Альтернатива глобальным переменным в Asp.Net Core?

В веб-API ASP.Net Core 1.1 мне нужно хранить некоторую глобальную информацию, которая должна быть доступна для всех контроллеров. Поэтому, когда клиент вызывает определенную конечную точку в API, должна быть установлена ​​определенная переменная (словарь), которая будет считываться со всех других контроллеров. Из того, что я видел, очевидно, плохая идея использовать глобальные статические переменные? Может быть, кто-то скажет мне, почему, и что является лучшей альтернативой? Я слышал об использовании файлов конфигурации или кеша...

1 ответ

Решение

Основная причина того, что многие разработчики не любят использовать глобальные переменные, заключается в том, что они могут затруднить (или сделать невозможным) полное модульное тестирование класса, который их использует. Разработчики, которые проводят модульное тестирование своего кода, предпочитают внедрение зависимостей над глобальными переменными.

Если необходимые переменные "вводятся в класс" путем передачи их в класс с помощью параметров конструктора класса, то единичные тесты могут передавать известные значения для этих переменных, что делает желаемые результаты теста предсказуемыми. Это помогает модульному тестированию значительно. Вы можете узнать больше о внедрении зависимостей в ASP.NET Core из официальной документации.

Еще одна проблема, связанная с глобальными переменными, заключается в том, что их можно изменить из любого места. Поэтому при отладке иногда бывает сложно отследить, какой фрагмент кода их изменил. Используя внедрение зависимостей, а не глобальные переменные, разработчик знает конкретные классы, которые имеют доступ к переменной.

Другие вопросы по тегам