Возможно, вам придется построить собственную фабрику контроллеров.Этот класс создает контроллеры и реализует IControllerFactory.Вы можете наследовать от DefaultControllerFactory.Переопределите CreateController (), чтобы вернуть свой собственный IController.
Зарегистрируйте фабрику контроллера в Application_Start () MvcApplication, используя следующую строку:
ControllerBuilder.Current.SetControllerFactory(typeof(MyControllerFactory));
В вашей реализации IController переопределите метод Execute.Вы можете использовать RequestContext, чтобы решить, какой делегат вызывать.Вероятно, было бы проще всего наследовать от ControllerBase и переопределить там Execute, если вы не хотите полностью реализовывать IController.
RequestContext, переданный в Execute, содержит объект RouteData.Это словарь, заполняемый механизмом маршрутизации, который сообщает вам, какое действие должно быть вызвано, и любые параметры.Вы можете получить имя действия следующим образом:
//context is a RequestContext object passed to IController.Execute()
string actionName = requestContext.RouteData.Values["action"];
Вы даже можете определить свое действие как словарь и просто извлечь его, как только получите имя действия.
И последнее,обычные методы действия возвращают ActionResult, который используется платформой, чтобы решить, какое представление визуализировать.После того, как вы выполните свои делегаты, я думаю, вам придется вручную устанавливать некоторые вещи в вашем специальном базовом контроллере.Я не совсем уверен, что установить или как выполнить ваш View отсюда, не взломав исходный код MVC.
Удачи!Это выглядит как интересная идея.