gpt4 book ai didi

asp.net-core - Microsoft.AspNet.Http.HttpContext 中的 ApplicationServices 和 RequestServices 有什么区别?

转载 作者:行者123 更新时间:2023-12-02 18:18:37 26 4
gpt4 key购买 nike

Startup 类中,我可以在 ConfigureServices 方法中添加服务。当我想要获取某个服务时,HttpContext实例中有2个属性,ApplicationServicesRequestServices。我想知道它们之间的区别以及如何正确使用它们。

编辑#1:例如,在 Startup 类中:

public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ICache, InProcessCache>(); // Line 1
services.AddSingleton<ISystemClientResolver>(SystemClientResolver.CreateInstance); // Line 2
services.AddScoped<SystemClient>(); // Line 3
services.AddRvcBusiness(); // Line 4
services.AddMvc(); // Line 5
}

如果我不在 Configure(IApplicationBuilder app) 方法中调用 app.UseRequestServices() ,我可以通过 SystemClient 实例获取 Context.ApplicationServices.GetService(typeof(SystemClient)),但它不是基于每个请求,似乎是单例,并且 Context.RequestServices 为 null。一旦我像这样调用 app.UseRequestServices() :

public void Configure(IApplicationBuilder app)
{
app.UseRequestServices();
// ...
}

Context.RequestServices 不为空,我可以通过 Context.RequestServices.GetService(typeof(SystemClient)) 获取 SystemClient 实例,并且实例是基于每个请求的。

最佳答案

ApplicationServices 适用于应用程序的生命周期,而 RequestServices 的范围仅限于特定请求 (HttpContext)。此外,RequestServices 可以为 null。一个特殊的 RequestContainer 中间件负责初始化 RequestServices:

app.UseRequestServices() 将使用 ConfigureServices 的结果作为 RequestServices

app.UseServices() 及其重载让您可以指定/修改请求服务

此外,如果您使用路由/或任何安全身份验证中间件,它们也会自动确保填充 RequestServices,因为它们依赖于请求范围的服务本身。

关于asp.net-core - Microsoft.AspNet.Http.HttpContext 中的 ApplicationServices 和 RequestServices 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27122427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com