在Startup课堂上,我可以在ConfigureServices方法中添加服务.当我想获得某个服务时,HttpContext实例中有2个属性,ApplicationServices和RequestServices.我想知道它们之间的区别以及如何正确使用它们.
编辑#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
}
Run Code Online (Sandbox Code Playgroud)
如果我不叫app.UseRequestServices()的Configure(IApplicationBuilder app)方法,我可以SystemClient通过例如Context.ApplicationServices.GetService(typeof(SystemClient)),但不是每个请求的基础,似乎单和Context.RequestServices为空.一旦我这样打电话app.UseRequestServices():
public void Configure(IApplicationBuilder app)
{
app.UseRequestServices();
// ...
}
Run Code Online (Sandbox Code Playgroud)
Context.RequestServices不是null,我可以获取SystemClient实例,Context.RequestServices.GetService(typeof(SystemClient))实例是按请求.
Hao*_*ung 13
ApplicationServices是应用程序的生命周期,同时RequestServices作用于特定请求(HttpContext).此外,RequestServices可以为null.一个特殊的RequestContainer中间件初始化RequestServices:
app.UseRequestServices()将使用ConfigureServices作为RequestServices 的结果
app.UseServices() 并且它的重载允许您指定/修改请求服务
此外,如果您使用路由/或任何安全身份验证中间件,他们将自动确保填充RequestServices,因为它们依赖于请求范围的服务本身.
| 归档时间: |
|
| 查看次数: |
4980 次 |
| 最近记录: |