Sobes.tech
Junior — Middle

Comment le traitement de plusieurs requêtes simultanées est-il effectué dans le contexte Scoped à un seul processus?

sobes.tech IA

Réponse de l'IA

Dans un contexte mono-processus avec une portée Scoped pour les dépendances dans ASP.NET Core, chaque requête HTTP reçoit sa propre instance de services avec une portée Scoped. Lorsqu'il y a plusieurs requêtes simultanées dans un même processus, un conteneur Scoped distinct est créé pour chaque requête, isolé des autres.

Cela est réalisé grâce au mécanisme du conteneur DI, qui crée un nouveau scope au début de la requête et le détruit à la fin. Ainsi, même dans une application mono-processus, chaque requête fonctionne avec son propre ensemble de services Scoped, ce qui empêche les conflits de données entre les requêtes.

Voici une approximation :

// Dans Startup.cs
services.AddScoped<IMyService, MyService>();

// Lors du traitement de chaque requête, un nouveau scope est créé
app.Use(async (context, next) => {
    using (var scope = app.ApplicationServices.CreateScope())
    {
        var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
        // Utilisation de myService dans le cadre de la requête
        await next();
    }
});

En réalité, ASP.NET Core crée automatiquement un scope pour chaque requête HTTP, donc le développeur n'a généralement pas besoin de le créer manuellement.