Ответ 1
Основной слой должен содержать:
- Модели/объекты/POCOs/Whatever_the_name... все о объектах домена
- ВСЕ интерфейсы (включая репозитории и службы)
- Реализация основных бизнес-сервисов (*)
(*) Если ваша компания занимается обработкой заказов, то реализация вашего IWorkOrderService
должна быть в основном уровне. Если ваш WorkOrderService
должен получить доступ, скажем, ShippingService
(который не является вашей компанией), тогда он будет манипулировать только IShippingService
, определенным на базовом уровне, а реализация IShippingService
будет находиться где-то на уровне инфраструктуры.
Если ваш WorkOrderService
нуждается в OrderRepository
, это будет сделано точно так же.
Вот пример кода:
namespace MyBusiness.Core.Services
{
internal class WorkOrderService: IWorkOrderService
{
public WorkOrderService(IOrderRepository orderRepository, IShippingService shippingService)
{
_orderRepository = orderRepository;
_shippingService = shippingService;
}
...
}
}
Это будет до самого внешнего слоя вашей архитектуры лука - уровня разрешения зависимостей - чтобы связать все ваши интерфейсы с правильной реализацией службы во время выполнения.
For<IWorkOrderService>().Use<Core.Services.WorkOrderService>();
For<IShippingService>().Use<Infrastructure.Services.ShippingService>();
For<IOrderRepository>().Use<Infrastructure.Data.OrderRepository>();