Каков срок службы контроллера ASP.NET MVC? - PullRequest
64 голосов
/ 01 марта 2010

Я нахожусь в процессе разработки своего приложения MVC, и я думал: каково время жизни класса контроллера?

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

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

Ответы [ 2 ]

46 голосов
/ 01 марта 2010

У Стивена Вальтера есть отличная статья о жизненном цикле запроса, обрабатываемого платформой MVC.

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

Обзор этапов жизненного цикла

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

1. RouteTable создан

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

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

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

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

MvcHandler создает контроллер, передает ему ControllerContext и запускает контроллер.

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

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

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

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

19 голосов
/ 01 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...