C# DDD中的UI层依赖关系

C# DDD中的UI层依赖关系,c#,mvvm,domain-driven-design,inversion-of-control,C#,Mvvm,Domain Driven Design,Inversion Of Control,我当前的项目是这样组织的: 域层->域对象和存储库接口 基础架构->存储库实现 MVVM模式中的应用程序层->服务 演示->仅访问服务层并使用ViewModels 我正在使用IoC容器(SimpleInjector)。“我的服务”在构造函数中接收IRepository,如: public CustomerService : ServiceBase { public CustomerService(ICustomerRepository repository, IUnitOfWork&l

我当前的项目是这样组织的:

  • 域层->域对象和存储库接口
  • 基础架构->存储库实现
  • MVVM模式中的应用程序层->服务
  • 演示->仅访问服务层并使用ViewModels
我正在使用IoC容器(SimpleInjector)。“我的服务”在构造函数中接收IRepository,如:

public CustomerService : ServiceBase
{
   public CustomerService(ICustomerRepository repository, IUnitOfWork<CustomerContext> uow)
   {
     ...
   }
}
publiccustomerservice:ServiceBase
{
公共CustomerService(ICustomerRepository存储库,IUnitOfWork uow)
{
...
}
}
我的问题是:

要在服务中注入存储库,我的表示层应该引用域层。可以添加此引用吗?我的表示层不应该只引用基础架构和应用程序层吗?

是的,没关系

您需要从合成根目录(通常位于表示层)中引用所有组件

我知道一开始感觉有点奇怪,但您需要区分DLL依赖项和硬类依赖项。如果表示层依赖于DLL,则没有问题;如果视图依赖于SQL存储库,则没有问题(例如)

我写了一篇关于这一点的博客文章,并提供了更多信息:


对于IoC,您必须参考表示层中的所有层(因为它是IoC引导程序配置的唯一有效位置),因为引导程序需要知道绑定它的具体实现(基础设施/数据访问层)和接口(域层)。