我正在 .NET 7 中使用 Clean Architecture 实现一个项目。根据下面的 Clean Architecture 图,我们不应该直接引用数据访问项目,而只能通过接口引用。
那么如何在不违反干净架构原则的情况下注册数据访问层的依赖项呢?
如果我在 Program.cs 中调用
builder.Services.AddDbContext<DataAccess.ApplicationDbContext>()
方法,那么我必须添加 DataAccess 库的引用,这违反了 Clean Architecture 的原则。
为了不违反干净架构原则,直接在 Program.cs 中调用 DBcontext,您可以通过抽象来实现。首先在数据访问层中创建一个具有静态 IServiceCollection 方法的类,并注册您的应用程序 DbContext。然后调用 Program.cs
中的注册方法 public static class DataAccessServiceReg
{
public static IServiceCollection AddDataAccessServices(this IServiceCollection services, IConfiguration configuration)
{
Services.AddDbContext<DataAccess.ApplicationDbContext>();
return services;
}
}
在您的程序中。Cs现在可以注册数据访问层中定义的数据访问服务
builder.Services.AddDataAccessServices(builder.Configuration);
通过这种设置,可以维护干净架构所需的关注点分离,并且主应用程序不会直接引用您的 DBContext。
您可以在 Clean Architecture 上查看这个公共模板,我在其中实现了此功能 here
我希望这有帮助。