Я пытаюсь понять, как разделить большое веб-приложение (ASP.net Core Web API + чистый Angular для пользовательского интерфейса; отсутствие Razor-представлений и т. Д.) На библиотеки с определенным периметром взаимодействия для каждой отдельной области приложения. .
Идеальным результатом, который я пытаюсь получить, был бы тонкий веб-проект, содержащий только классы Program / Startup и приложение Angular Client, а также несколько библиотек .net, раскрывающих функциональность каждой основной области приложения. Каждая библиотека должна представлять в качестве открытых классов только контроллеры / интерфейсы и их модели.
Я узнал, как поместить контроллеры и модели в отдельные библиотеки и включить их обнаружение во время выполнения, но у меня возникли проблемы с классами, которые не должны быть доступны для основного приложения, например DbContext
s и связанных с ними POCO объекты. Нет причины, по которой они должны быть public
- они должны вызываться только через соответствующие методы контроллера. Поэтому я попытался определить их как внутренние и зарегистрировать их как сервисы, используя специальные методы расширения внутри их сборки контейнера - но оказалось, что я не могу получить их с помощью DI-конструктора-инъекции в мои контроллеры: на самом деле, если я отмечу конструктор как публичный компилятор жалуется, что один из параметров конструктора менее доступен, чем контроллер, - и если я отмечаю конструктор как внутреннюю привязку времени выполнения, происходит сбой, и говорит, что не может найти мой контроллер.
Я мог бы использовать шаблон Service Locator для получения необходимых мне услуг, но я понимаю, что это часто осуждается (по уважительным причинам). Неужели нет другого пути, кроме как сделать все в библиотеке публичным?