Добавление фабрики контроллеров в ASP MVC - PullRequest
12 голосов
/ 20 февраля 2009

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 20 февраля 2009

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

1 голос
/ 20 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...