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