Como é que o processamento de várias solicitações que ocorrem simultaneamente é realizado no contexto Scoped de um único processo?
sobes.tech IA
Resposta da IA
Num contexto de processo único com âmbito Scoped para dependências no ASP.NET Core, cada pedido HTTP recebe a sua própria instância de serviços com âmbito Scoped. Quando vários pedidos são processados simultaneamente no mesmo processo, é criado um contêiner Scoped separado para cada pedido, isolado dos outros.
Isto é conseguido através do mecanismo do contêiner DI, que cria um novo escopo no início do pedido e o destrói ao terminar. Assim, mesmo numa aplicação de processo único, cada pedido trabalha com o seu próprio conjunto de serviços Scoped, o que previne conflitos de dados entre pedidos.
Mais ou menos assim:
// No Startup.cs
services.AddScoped<IMyService, MyService>();
// Ao processar cada pedido, é criado um novo escopo
app.Use(async (context, next) => {
using (var scope = app.ApplicationServices.CreateScope())
{
var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
// Uso de myService no âmbito do pedido
await next();
}
});
Na realidade, o ASP.NET Core cria automaticamente um escopo para cada pedido HTTP, pelo que normalmente o programador não precisa de o criar manualmente.