【发布时间】:2015-12-11 20:57:54
【问题描述】:
在Startup 类中,我可以在ConfigureServices 方法中添加服务。当我想获得某个服务时,HttpContext 实例中有两个属性,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
}
如果我不在Configure(IApplicationBuilder app) 方法中调用app.UseRequestServices(),我可以通过Context.ApplicationServices.GetService(typeof(SystemClient)) 获取SystemClient 实例,但这不是基于每个请求的,它似乎是单例并且Context.RequestServices 为空。一旦我像这样打电话给app.UseRequestServices():
public void Configure(IApplicationBuilder app)
{
app.UseRequestServices();
// ...
}
Context.RequestServices 不为空,我可以通过Context.RequestServices.GetService(typeof(SystemClient)) 获取SystemClient 实例,并且该实例是基于每个请求的。
【问题讨论】:
-
注意:
ApplicationServices不再是HttpContext的一部分。
标签: asp.net-core