有没有办法将asp.net core中的服务注册为Scoped以请求而不是当前请求范围?
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IMyService, MyService>();
}
注册服务在请求范围内可用,但一旦我创建新的子范围:
var service1 = serviceProvider.GetService<IMyService>();
var scope = serviceProvider.CreateScope();
var service2 = scope.ServiceProvider.GetService<IMyService>();
Service1 和 service2 是 2 个实例。即使子作用域是在同一请求中创建的。有没有一种方法可以注册服务以请求范围,以便从同一请求范围创建的所有子范围都将具有相同的一个实例?
最佳答案
.Net Core 中没有明确的 RequestScope 功能,而 .Net Framework 相反。我们使用“Scoped”,因为.Net Core 在第一个调用的中间件开始时创建作用域,内部服务通过构造函数注入(inject)获得相同的对象实例。例如;如果你收到一个 API 请求,即“作用域请求实例”,它会将所有实例进行到内部作用域,但你不能使用 CreateScope() 方法手动执行,正如我提到的为什么不能这样做。
您对创建内部作用域感到困惑,但 .Net Core 为每个 API 请求创建了作用域。
关于c# - 子范围中每个请求范围的 Asp.net Core 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72717233/