В классе 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)), а экземпляр - на основе запроса.