Asp.net core 如何将基础架构与.NetCore WebAPI完全分离,或者我应该这样做?

Asp.net core 如何将基础架构与.NetCore WebAPI完全分离,或者我应该这样做?,asp.net-core,design-patterns,dependency-injection,inversion-of-control,clean-architecture,Asp.net Core,Design Patterns,Dependency Injection,Inversion Of Control,Clean Architecture,作为软件开发人员,我们知道“依赖倒置原则”和“关注点分离”是我们应该遵循的两条主要规则。大多数架构模式(如“干净的架构”)都为我们提供了一些实现细节。但示例项目缺少一些细节。我也找不到一个全面的解决办法 我的服务解决方案有3个项目。这些是: 服务核心 服务、基础设施 服务Api 据我所知,我可以将引用从基础架构添加到核心。从Api项目到核心。因为,基础设施项目有一些实现细节,而api项目不需要知道这些实现细节 据此: 问题1: 对于数据库作业,我可以在核心项目中放置一个IRepository

作为软件开发人员,我们知道“依赖倒置原则”和“关注点分离”是我们应该遵循的两条主要规则。大多数架构模式(如“干净的架构”)都为我们提供了一些实现细节。但示例项目缺少一些细节。我也找不到一个全面的解决办法

我的服务解决方案有3个项目。这些是:

  • 服务核心
  • 服务、基础设施
  • 服务Api
据我所知,我可以将引用从基础架构添加到核心。从Api项目到核心。因为,基础设施项目有一些实现细节,而api项目不需要知道这些实现细节

据此:

问题1: 对于数据库作业,我可以在核心项目中放置一个IRepository接口,并在基础设施项目中实现它。但我如何在Api项目中注册实现类型而不添加对基础设施项目的引用呢

问题2: 日志记录是一种IO工作。在我看来,这应该是在基础设施项目。我想用Serilog。我可以在核心项目中抽象ILogger,但这还不够。例如,我应该为“UseSerilogRequestLogging”中间件做什么?或者我应该如何在CreateHostBuilder中将Serilog添加到通用主机

建议的做法:

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .UseSerilog();
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
})
.useserlog();
我假设Service.Api是应用程序的入口点。那就是你把钱放在那里的地方。入口点。所以,是的:Service.Api应该引用Service.Infrastructure

日志实现也是如此,但请记住,最好的地址是。您不需要Service.Core中的
ILogger
接口。添加一个是一种代码味道,因为日志记录不是一个域模型问题。

我假设Service.Api是应用程序的入口点。那就是你把钱放在那里的地方。入口点。所以,是的:Service.Api应该引用Service.Infrastructure


日志实现也是如此,但请记住,最好的地址是。您不需要Service.Core中的
ILogger
接口。添加一个是一种代码味道,因为日志记录不是域模型问题。

这种避免引用的尝试只会导致更多的混乱。只需了解组合根用户需要了解所有部分,以便正确地映射/注册抽象及其实现。也就是说,请注意:“请编辑问题,将其限制为具有足够详细信息的特定问题,以确定适当的答案。避免一次问多个不同的问题”这种避免引用的尝试只会导致更多的混乱。只需了解组合根用户需要了解所有部分,以便正确地映射/注册抽象及其实现。也就是说,请注意:“请编辑问题,将其限制为具有足够详细信息的特定问题,以确定适当的答案。避免一次问多个不同的问题”Hello@Mark,谢谢你的回答。这个答案不仅是我需要的,而且给了我一个很好的起点。我读过一些关于架构模式的文章,但看起来我需要一些时间和更多的实践来内化这个主题。我读了你的博客。这给了我一些观点。你好@Mark,谢谢你的回答。这个答案不仅是我需要的,而且给了我一个很好的起点。我读过一些关于架构模式的文章,但看起来我需要一些时间和更多的实践来内化这个主题。我读了你的博客。这给了我一些看法。