@footballer

ASP.NET: можно ли вынести контроллеры в отдельный проект при использовании IoC?

Создал ASP.NET WEB API приложение через шаблон визуал студии, студия сгенерила запускаемый веб-проект WebApi, в котором создала дефолтный контроллер. Дальше я создал проекты DataAccess, BusinessLogic и Domain. В Domain находятся сущности из БД и интерфейсы для DataAccess и BusinessLogic, соотвественно, DataAccess и BusinessLogic реализуют эти интерфейсы и ссылаются на Domain. Проект WebApi тоже ссылается на Domain, но не ссылается на DataAccess и BusinessLogic, т.к. WebApi ничего не знает о реализациях, а знает только об интерфейсах, а реальные DataAccess и BusinessLogic подставляются через IoC-контейнер (для этого пришлось также переопределить инициализацию контроллеров через тот же IoC-контейнер, кто с IoC работал, тот поймет).
В предыдущих проектах я видел только, что IoC-контейнер инициализировался прямо внутри проекта WebApi, но из-за этого приходилось в WebApi добавлять ссылки на DataAccess и BusinessLogic. И тут я подумал, для чего WebApi ссылаться на DataAccess и BusinessLogic, если он все-равно с ними не должен никогда работать напрямую, а только через интерфейсы из Domain. Тут я подумал, что инициализацию IoC можно оставить в сгенеренном студией запускаемом веб-проект WebApi, где изначально располагался контроллер, а сам контроллер вынести в отдельный проект, например, WebApiControllers. В результате для проекта WebApiControllers можно будет не добавлять референсы на DataAccess и BusinessLogic, а только на Domain, и в нем не будет лишних зависимостей. Т.к. инициализацию нужных контроллеров я переопределил со стандартной и сам разруливаю через мной настроенный IoC, то проблем с вызовом контроллеров при выносе их в отдельный проект не будет.

Можно ли сделать такую схему, или это очень плохо? Я никогда на проектах не видел, чтобы контроллеры выносили в отдельный не стартовый проект.

Или оставить все как есть и не стоит париться из-за того, что из-за инициализации IoC пришлось привязать проект WebApi к проектам DataAccess и BusinessLogic?
  • Вопрос задан
  • 330 просмотров
Пригласить эксперта
Ответы на вопрос 2
Я обычно в подобной ситуации делаю отдельный проект IoC, который знает о DataAccess и BusinessLogic. После этого делаю в нем екстеншен метод для IServiceCollection в котором все регестирую, а уже в WebApi его вызываю
Ответ написан
Почитайте Макр Симана - внедрение зависимостей.
IoC - самое "грязное" место. Размещайте его в точке старта приложения, где ему и место.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы