Расширяемость контроллеров
Предлагаемая по умолчанию реализация контроллера уже включает в себя некоторые конкретные идеи того, как можно выбирать, выполнять и расширять методы действий. Эта функциональность берется из базового класса Controller
фреймворка ASP.NET MVC, который является реализацией по умолчанию интерфейса IController
.
IController
– это простой интерфейс, который предоставляет простой метод Execute()
и который вы могли бы реализовать напрямую. При реализации этого интерфейса вы также можете использовать такую функциональность фреймворка как маршрутизация и фабрика контроллеров, а остальную часть фреймворка отбросить в сторону.
Определение интерфейса IController
продемонстрировано на рисунке 16-1.
Рисунок 16-1: В интерфейсеIController
объявлен единственный метод,Execute()

Доступна еще одна возможность расширения контроллеров, которая не является столь скудной как реализация IController
. Фреймворк содержит класс ControllerBase
, который предоставляет самые основные свойства для управления ViewData
и TempData
. Класс ControllerBase
приведен на рисунке 16-2. Этот класс является минимальным по содержанию, но все-таки позволяет использовать преимущества некоторых концепций, связанных с представлением.
Рисунок 16-2: КлассControllerBase
предоставляет возможность интеграции с роутингом, а также сHttpContext

Несмотря на существование во фреймворке возможностей расширения, предоставляемых интерфейсом и базовым классом, некоторые разработчики и проектировщики обменивают продуктивность, встроенную в класс контроллеров фреймворка, на дополнительные действия, необходимые для их собственной реализации интерфейса IController
. То же самое происходит и с классом ControllerBase
. Нам не нужно жертвовать продуктивностью, так как существует множество возможностей расширения, встроенных в класс Controller
. Мы рассмотрим их далее.