У меня есть дизайнерская идея для большого проекта на работе, и я думаю, что я его понял, но мне бы очень хотелось получить некоторые отзывы о) идее в целом и б) моей предлагаемой реализации.
Основная идея проста: я хочу создать приложение ASP MVC, которое может быть расширено в будущем с помощью дополнительных контроллеров и представлений без необходимости перекомпилировать код. Идея состоит в том, чтобы иметь одно приложение MVC с очень простым набором функций, а затем расширить функциональность, добавив еще одну "Application.dll", которая содержит контроллеры, данные и бизнес-логику, специфичные для этого приложения. Представления будут просто скопированы в тот же каталог, что и основное приложение MVC во время установки.
Проблема заключается в том, что MVC выполняет свою маршрутизацию по типам внутри одной и той же сборки, поэтому, даже если я переношу определения маршрутизации в базу данных, MvcHttpHandler не сможет направить что-либо в новую Dll, поскольку она не "знает", в нем вводится контроллер. Глядя на код MVC, я обнаружил, что для загрузки контроллеров они просто вызывают Activator.CreateInstance, который выглядит только в текущей сборке.
Мое решение прост, но, может быть, я что-то упустил: я переопределю MvcHttpHandler, либо напрямую заменив ControllerFactory (не уверен, как это сделать), либо дублируя эту функциональность в производном классе. Новый код прочитает запрос и попытается сначала загрузить контроллер из текущей сборки, а затем из расширенных. Как только соответствующая сборка будет найдена, я буду использовать CreateInstance и передать эту сборку, чтобы получить контроллер, который я хочу.