Какова продолжительность жизни ASP.NET MVC Controller?

Я занимаюсь разработкой своего MVC-приложения, и я думал: "Каково время жизни класса контроллера?

Когда он создается? Сколько экземпляров одного контроллера существует? каковы последствия локальных переменных? когда он уничтожается?

Я уверен, что есть хорошая ссылка, где-то плавающая в Интернете, но мой google-fu не смог ее найти.

Ответ 1

Стивен Вальтер имеет отличную статью о жизненном цикле запроса, обрабатываемого MVC Framework.

Здесь выдержка из верхней части его статьи, в нем подробно объясняется каждый шаг:

Обзор шагов жизненного цикла

Есть пять основных шагов, которые происходят, когда вы делаете запрос с веб-сайта ASP.NET MVC:

1. Создан RouteTable

Этот первый шаг выполняется только один раз, когда сначала запускается приложение ASP.NET. RouteTable сопоставляет URL-адреса обработчикам.

2. Модуль UrlRouting перехватывает запрос

Этот второй шаг происходит, когда вы делаете запрос. Модуль UrlRoutingModule перехватывает каждый запрос и создает и выполняет правый обработчик.

3. Выполняется MvcHandler

MvcHandler создает контроллер, передает контроллер ControllerContext и выполняет контроллер.

4. Контроллер выполняет

Контроллер определяет, какой метод контроллера выполнить, строит список параметров и выполняет этот метод.

5. Вызывается метод RenderView

Как правило, метод контроллера вызывает RenderView() для возврата содержимого в браузер. Метод Controller.RenderView() делегирует свою работу определенному представлению ViewEngine

Ответ 2

Предполагая, что вы не измените значение по умолчанию ControllerFactory, контроллеры будут созданы для каждого запроса и будут собираться мусором "через некоторое время после завершения запроса".

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