使用.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不是线程安全的,因此不应跨线程重复使用同一实例。