Книга: ASP.NET MVC Framework
Порядок вызова архитектурных механизмов
Порядок вызова архитектурных механизмов
ASP.NET MVC реализует следующий порядок выполнения внутренних механизмов:
1. При первом обращении к приложению в Global.asax производится регистрация маршрутов механизма маршрутизации ASP.NET в специальном объекте RouteTable
.
2. С помощью urlRoutingModule
производится маршрутизация запроса с использованием созданных маршрутов, при этом выбирается первый подходящий маршрут, после чего создается объект типа RequestContext
.
3. Обработчик MvcHandler
, с помощью данных полученного объекта RequestContext
, инстанцирует объект фабрики контроллеров типа IControllerFactory
. Если он не был задан специально, по умолчанию инстанцируется объект класса DafaultControllerFactory
.
4. В фабрике контроллеров вызывается метод GetControllerInstance
, который принимает параметр в виде типа необходимого контроллера. Этот метод возвращает инстанцированный объект необходимого контроллера.
5. У полученного объекта контроллера вызывается метод Execute, которому передается объект RequestContext
.
6. С помощью ActionInvoker
, свойства класса Controller
типа ControllerActionInvoker
, определяется необходимое действие и выполняется его код. Если ActionInvoker
специально не сопоставлен, то используется свойство ActionInvoker
по умолчанию. Для инициализации параметров действия используется механизм Model Binding, который может быть переопределен.
7. Определение действия может быть изменено в случае, когда пользователь определил для действий атрибуты типа ActionMethodSelectorAttribute
. Для каждого такого атрибута вызывается метод IsValidForRequest
, которому передается набор параметров типа ControllerContext
и MethodInfo
. Метод IsValidForRequest
возвращает результат в виде bool
, который определяет, подходит ли выбранное действие для исполнения в контексте запроса.
8. Выполнение действия может быть отменено, изменено или пропущено, если пользователь определил для действия атрибуты типа FilterAttibute
. Такие атрибуты могут использоваться для определения прав доступа, кэширования результатов, обработки исключений.
9. В случае когда для действия определены атрибуты типа ActionFilterAttribute
, то выполнение действия может быть изменено таким атрибутом на следующих этапах: перед выполнением действия, после выполнения действия, перед исполнением результата или после исполнения результата действия.
10. В случае когда Actioninvoker
был специально переопределен, то после вызова действия результат действия передается методу CreateActionResult
свойства Actioninvoker
, который волен переопределить возвращаемый результат действия и вернуть результат типа ActionResult
.
11. В случае, когда Actioninvoker
не был переопределен, действие должно вернуть результат выполнения в виде ActionResult
.
12. Для результата типа ActionResult
вызывается метод ExecuteResult
, который осуществляет отображение результата для контекста запроса. Создав свой вариант класса, наследующий ActionResult
и реализующий ExecuteResult, можно переопределить действие и возвращать результат в нужном виде, например, формировать RSS-ленту.
Рассмотрим все шаги, относящиеся к контроллерам и действиям, более подробно. Для этого выделим основные темы:
? фабрика контроллеров;
? действия, фильтры и атрибуты;
? механизм Model Binding.
- 7.3. Порядок заключения, изменения, расторжения договоров
- Определение необходимого системного вызова
- Магическая программа, или Беспорядок по расписанию
- Порядок создания связей
- 2.6.1. Порядок ведения записей
- Приоритет и порядок выполнения
- 2.3.2. GNU getopt() и порядок опций
- Порядок байтов на компьютере и в сети
- 8.4.3.2. Функция обратного вызова nftw()
- Семантика вызова
- Контекст системного вызова
- Окончательные шаги регистрации системного вызова