ASP NET Как хранить данные внутри приложения?

Привет всем.
Изучаю ASP.NET Core.
Сейчас осваиваю MVC. Хотелось бы спросить вас, как хранить общие для все Action данные?
К примеру: обычный Home контроллер, с методами (Actions) Index и Index2. В контроллере есть свойство
public int Counter { get { return _c++; } }
В обе View передаю это свойство. Перехожу по страницам, но свойство не инкрементируется.

Из этого можно предположить, что для каждого запроса создается новый экземпляр контроллера. Можно сделать статическим это свойство, тогда все будет норм. Но как по мне, данный метод не самый найс. Хранить данные в сессиях или куках мне тоже не нравится. БД тем более.

Куда обычно записываются данные для "глобального" хранения?

UPD: уточняю по поводу работы контроллера. Конструктор срабатывает при каждом обращение, но вот деструктор ни срабатывает ни разу. Следовательно назревает вопрос, а не забьет ли этот контроллер всю память?
  • Вопрос задан
  • 2494 просмотра
Пригласить эксперта
Ответы на вопрос 2
AlekseyNemiro
@AlekseyNemiro
full-stack developer
У приложения есть события запуска и завершения работы.

Общие данные можно загружать при запуске приложения (Application_Start) или подгружать в статические классы в процессе работы приложения. Либо использовать HttpApplication, хотя смысла в этом особого нет.

Важную информацию можно сохранить при завершении работы приложения (Application_End) в любое удобное хранилище (базы данных, файлы). Если данные очень важны, то лучше их периодически сохранять в процессе работы приложения (сделать таймер при инициализации приложения), т.к. рабочий процесс может быть завершен некорректно и событие Application_End может не возникнуть. Также следует учитывать вероятность неожиданного завершения работы приложения в момент сохранения важных данных (например, если рабочий процесс будет убит).

Временные данные можно хранить в кэше.

Небольшие объемы данных можно хранить в переменных, но лучше постараться держать такие данные в одном месте и не размазывать по всему приложению. Например, использование для этих целей классов контроллеров - не лучшая идея.
Ответ написан
Комментировать
ASP.NET обычно state less - не хранит состояний. Приложение может быть остановлено/запущено в любой момент (например IISом) и все статические переменные потеряют свои значения. Если нужно именно хранение (persistence) то на выбор: файлы, базы данных, внешние кэши и т.д.

Счетчики правильнее хранить во внешнем кэше (например в redis).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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