c# - 子范围中每个请求范围的 Asp.net Core 服务

标签 c# asp.net-core dependency-injection

有没有办法将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 请求创建了作用域。

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

关于c# - 子范围中每个请求范围的 Asp.net Core 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72717233/

相关文章:

c# - 如何检查鼠标指针是否可见?

c# - 如何连接Azure联合根数据库并在 Entity Framework 中应用联合?

c# - Asp.Net核心: call a custom method after response is returned from another middleware

asp.net-core - 虚张声势 Swagger : How to show type of array of models parameter?

c# - 数据库播种仅适用于一个模型,不适用于第二个模型

android - 使用 Dagger 2 的 CustomView 依赖注入(inject)(在 Activity 范围内)

dependency-injection - DI : Composition root decomposition

c# - 处理枚举更改方法的更好方法?

c# - 填充列表上的 lambda 表达式

c# - 如何在不同的范围内获取同一服务接口(interface)的多个实现