2010-03-01 3 views
59

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

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

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

+0

Стив Сандерсон создал хороший плакат, изображающий MVC [Request Handling Pipeline] (http: //blog.stevensanderson.com/2009/10/08/aspnet-mvc-learning-resource-request-handling-pipe-poster /), которые могут вас заинтересовать. –

ответ

44

У Stephen Walther отличное article на жизненный цикл запроса, обрабатываемого MVC Framework.

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

Обзор Lifecycle шагов

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

1. RouteTable создается

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

2. UrlRoutingModule перехватывает запрос

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

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

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

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

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

5. Метод RenderView называется

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

+0

Ссылка на статью Стивена Вальтера больше не действительна! – Hamed

+1

Это вряд ли описание «срока службы» контроллера. Предположим, я хочу начать транзакцию при создании контроллера, выполнить ноль или более действий, а затем зафиксировать действия как единицу. Когда, собственно, уничтожен контроллер? Когда я могу косвенно вызвать метод «Откат», когда есть проблема с одним из действий? –

16

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

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

Смежные вопросы