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

前端之家收集整理的这篇文章主要介绍了asp.net-core – 在Microsoft.AspNet.Http.HttpContext中的ApplicationServices和RequestServices有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在启动类中,我可以在ConfigureServices方法添加服务.当我想要获得一定的服务时,HttpContext实例,ApplicationServices和RequestServices中有2个属性.我想知道他们之间的区别和如何正确使用它们.

编辑#1:
例如,在启动类中:

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
}

如果我没有在配置(IApplicationBuilder app)方法调用app.UseRequestServices(),我可以通过Context.ApplicationServices.GetService(typeof(SystemClient))获取SystemClient实例,但是并不是按请求的基础,它似乎是单例和上下文.RequestServices为空.一旦我这样调用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也被填充,因为它们依赖于请求作用域服务本身.

原文链接:https://www.f2er.com/aspnet/250480.html

猜你在找的asp.Net相关文章