在.NET Core中避免n层体系结构中的循环依赖性

Ezi*_*nze 1 c# architecture dependency-injection n-tier-architecture .net-core

我已经在.net core(控制台应用程序)中创建了这样的n层体系结构:

Company.App
   -> reference to Company.Services
   -> reference to Company.Infrastructure

Company.Services
   -> reference to Company.Infrastructure

   + IWorkStarter
   + WorkStarter - (ExternalClient is injected)

Company.Infrastructure
   + RabbitMqConsumer - (IWorkStarter must be injected) - Cyclic dependency
   + IExternalClient
Run Code Online (Sandbox Code Playgroud)

如您所见,Services已经有对的引用Infrastructure。而且我也必须IWorkStarter在兔子用户内部使用。似乎我没有必要的知识来以正确的方式分离这些组件。请你帮助我好吗?该项目非常简单。

Nko*_*osi 6

按照设计,我经常在带有ASP.NET Core的Clean Architecture(洋葱架构)中看到。

查看以下内容

Company.App
   -> reference to Company.Services
   -> reference to Company.Infrastructure
   -> reference to Company.Core

    + Compsition Root maps everything

Company.Services
   -> reference to Company.Infrastructure
   -> reference to Company.Core

   + WorkStarter - (ExternalClient is injected)

Company.Infrastructure
   -> reference to Company.Core

   + RabbitMqConsumer - (IWorkStarter must be injected)

Company.Core
   + IWorkStarter
   + IExternalClient
Run Code Online (Sandbox Code Playgroud)

将抽象移出自己的关注

以下参考资料库提供了一个很好的示例

https://github.com/ardalis/CleanArchitecture

核心项目

核心项目是Clean Architecture设计的中心,所有其他项目依赖项都应指向该项目。这样,它几乎没有外部依赖性。