В классе 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
}
Если я не вызываю метод app.UseRequestServices()
в Configure(IApplicationBuilder app)
, я могу получить экземпляр SystemClient
на Context.ApplicationServices.GetService(typeof(SystemClient))
, но он не для каждого запроса, кажется, singleton и Context.RequestServices
равно null. Как только я назову app.UseRequestServices()
следующим образом:
public void Configure(IApplicationBuilder app)
{
app.UseRequestServices();
// ...
}
Context.RequestServices
не является нулевым, и я могу получить экземпляр SystemClient
на Context.RequestServices.GetService(typeof(SystemClient))
, а экземпляр - на основе запроса.