Я не знаю, является ли это наилучшей практикой, но я сделал много проектов, которые содержат много общей логики и функциональности между службами Windows, веб-API и т. Д. Все они следовали чему-то похожему на это:
Wrapper - содержит взаимодействия, модели и код для упрощения вызова WebAPI из другого проекта .NET. Не имеет ссылок на другие проекты вообще
Ядро - содержит всю мясную бизнес-логику.Сервисный уровень, уровень доступа к данным, вспомогательные классы и т. Д. References Wrapper и все остальное, что необходимо для работы
WebAPI - содержит только код, необходимый для создания WebAPI вокруг функций сервисного уровня в Core Ссылки Wrapper для моделей / интерфейсов и Core для бизнес-логики
Другие проекты, использующие Core, будут аналогичны WebAPI.Примерами могут служить консольное приложение для запланированных задач, служба Windows для непрерывной обработки данных и т. Д.
В результате я вижу, что некоторые люди называют это "мега-решением" или подобным, но до тех пор, покавы держите свой код в одном домене, вы не создаете беспорядок.