如果默认添加 DbContext 范围,为什么要添加它?

Why is DbContext scope being added if it adds it by default?

使用 .NET 应用程序的 Clean Architecture 模板,在设置 DbContext 时,默认情况下它会添加一个范围内的服务。那么为什么需要为范围添加额外的一行。这是否提供了额外的功能?

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
                    options.UseSqlServer(
                        configuration.GetConnectionString("DefaultConnection")));
    
    services.AddScoped<IApplicationDbContext>(provider => 
       provider.GetService<ApplicationDbContext>());
}

第二行在依赖注入容器上注册接口。它增加了注入接口而不是具体实现的可能性。

使用 AddScoped 的原因是 AddDbContext 也使用请求范围的实例。使用请求范围实例而不是单例的原因是 DbContext 不是线程安全的,因此不应跨线程重复使用同一个实例。