Какая разница между ApplicationServices и RequestServices в Microsoft.AspNet.Http.HttpContext?

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

Ответы

Ответ 1

ApplicationServices относятся к сроку действия вашего приложения, а RequestServices привязаны к определенному запросу (HttpContext). Кроме того, RequestServices может быть нулевым. Специальным промежуточным программным обеспечением RequestContainer является то, что инициализирует RequestServices:

app.UseRequestServices() будет использовать результат ConfigureServices как RequestServices

app.UseServices() и его перегрузки позволяют указать/изменить службы запросов

Также, если вы используете маршрутизацию/или любое промежуточное программное обеспечение безопасности, они автоматически гарантируют, что RequestServices также будут заполнены, поскольку они полагаются на службы с ограниченным запросом.