Подтвердить что ты не робот

Добавление контроллера factory в ASP MVC

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

Основная идея проста: я хочу создать приложение ASP MVC, которое может быть расширено в будущем с помощью дополнительных контроллеров и представлений без необходимости перекомпилировать код. Идея состоит в том, чтобы иметь одно приложение MVC с очень простым набором функций, а затем расширить функциональность, добавив еще одну "Application.dll", которая содержит контроллеры, данные и бизнес-логику, специфичные для этого приложения. Представления будут просто скопированы в тот же каталог, что и основное приложение MVC во время установки.

Проблема заключается в том, что MVC выполняет свою маршрутизацию по типам внутри одной и той же сборки, поэтому, даже если я переношу определения маршрутизации в базу данных, MvcHttpHandler не сможет направить что-либо в новую Dll, поскольку она не "знает", в нем вводится контроллер. Глядя на код MVC, я обнаружил, что для загрузки контроллеров они просто вызывают Activator.CreateInstance, который выглядит только в текущей сборке.

Мое решение прост, но, может быть, я что-то упустил: я переопределю MvcHttpHandler, либо напрямую заменив ControllerFactory (не уверен, как это сделать), либо дублируя эту функциональность в производном классе. Новый код прочитает запрос и попытается сначала загрузить контроллер из текущей сборки, а затем из расширенных. Как только соответствующая сборка будет найдена, я буду использовать CreateInstance и передать эту сборку, чтобы получить контроллер, который я хочу.

4b9b3361

Ответ 1

Конец в этой статье показывает, как реализовать свой собственный ControllerFactory. В принципе, вы получаете значение DefaultControllerFactory, а затем подключаете его в Application_Start() в свой global.asax.

Ответ 2

Нет ничего плохого в идее контроллера factory, если это просто для гибкости позже. проблема si при загрузке контроллеров с кодом, который принадлежит другим слоям, что является одной из причин, по которой вам может понадобиться гибкость других контроллеров. Пока вы не мешаете листы слоев, я не вижу реальной проблемы с идеей factory.