В настоящее время я использую Autofac
для IoC и двух корней композиции (один для интерфейсного и один для внутреннего). Я регистрирую и разрешаю компоненты, натянутые на Service
, Business
и Data
слоев.Модули Autofac в архитектуре N-уровня
На данный момент у меня есть один такой, как «AccountingModule». Теперь я собираюсь добавить в приложение несколько новых модулей с таким именем, как InventoryModule
, ...
Мой вопрос: должен ли я разделять классы модулей среди слоев (решение 1) или иметь все уровни отдельно для каждого модуль (Раствор 2)
Раствор 1:
Service Layer
(AccountingMoudle, InventoryModule, ...)
Business Layer
(AccountingMoudle, InventoryModule, ...)
Data Layer
(AccountingModule, InventoryModule, ...)
или
Раствор 2:
AccountingModule
(
Service Layer,
Business Layer,
Data Layer
)
InventoryModule
(
Service Layer,
Business Layer,
Data Layer
)
Редактировать 1
+-----------------------------+ +----------------------------+
+--+AccountingServiceComponent +-+InventoryServiceComponent
| Weak Dependency |
+--+AccountingBusinessComponent <------------------+ +-+InventoryBusinessComponent
| |
+--+AccountingDataComponent +-+InventoryDataComponent
+ +
+-+ GetDocumentByID(int id) +--+GetProductByID(int id)
| |
+-+ SaveDocument(Document d) +--+SaveProduct(Product p)
Edit 2 Архитектура:
Должно быть ровно один корень композиции для каждого приложения. В вашем случае у вас есть только одно конечное приложение, поэтому у вас должен быть один корневой состав. – Steven
Связанный: https://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry-application – Steven