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

标签 c# .net-5 clean-architecture

使用 .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>());
}

最佳答案

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

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

关于c# - 如果默认添加 DbContext 范围,为什么还要添加它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69383992/

相关文章:

flutter - 对于Flutter,MVVM架构和Reso Coder的简洁架构有何不同?

aggregation - Clean Architecture 中的单一职责原则,在一个 UseCaseManager 中聚合用例,可以提供基于 In & Out 对象的 UseCase。

java - 整洁的架构 : separate IO and Core in different . jar 文件

c# - 从遗留类(启动方法 + 事件)创建任务(或可观察对象)

C#托管代码引用类型问题

asp.net-core - .NET 5 Web API : Storing data per request

c# - 使用 Azure Functions 和 .NET 5 将不同的连接字符串传递到 IDesignTimeDbContextFactory(独立)

javascript - 通过后端c#在javascript文件中设置数据

c# - SCardConnect (winscard.dll) 总是返回错误

Linux 上的 Azure Web 应用程序突然停止工作