繁体   English   中英

子范围中每个请求范围的 Asp.net 核心服务

[英]Asp.net core service per request scope in child scopes

有什么方法可以将 asp.net 核心中的服务注册为 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 框架中没有RequestScope功能。 我们使用“Scoped”,因为 .Net Core 在第一个调用的中间件开始时创建范围,内部服务通过构造函数注入获得相同的对象实例。 例如; 如果您收到一个 API 请求,即“作用域请求实例”,它将对内部作用域进行所有实例,但是您不能手动使用 CreateScope() 方法,因为我提到了为什么不能。

您对创建内部范围感到困惑,但 .Net Core 为每个 API 请求创建范围。

示例: https ://stackoverflow.com/a/38139500/7575384

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM