La différence entre AddSingleton, AddScoped et AddTransient en .NET Core
Bien choisir sa méthode d'injection, sous peine d'avoir des problèmes de durée de vie...

Article publié le 22/07/2025, dernière mise à jour le 22/07/2025
Dans une application ASP.NET Core, l’injection de dépendances (DI) est un concept central.
Cela permet de séparer les responsabilités, de rendre le code plus testable et plus modulaire.
Mais quand on enregistre un service dans le conteneur de dépendances, il est très important de bien choisir la manière dont on va le faire, car cela va notamment influencer sa durée de vie. Il va donc falloir choisir entre les trois méthodes : AddSingleton
, AddScoped
et AddTransient
.
AddSingleton : une instance pour toute l’application
Quand on utilise AddSingleton
, une seule instance du service est créée et partagée durant toute la vie de l’application. Elle est instanciée la première fois qu’on en a besoin, puis réutilisée à chaque injection.
Ce type est idéal pour :
- des services sans état,
- du cache,
- des objets de configuration partagés.
services.AddSingleton<IService, MyService>();
AddScoped : une instance par requête HTTP
Un service enregistré avec AddScoped
est instancié une seule fois par requête HTTP. Cela signifie que si un service est injecté plusieurs fois au sein d’une même requête, c’est la même instance qui est réutilisée.
Ce comportement est particulièrement utile pour :
- les services qui dépendent du contexte de la requête,
- l’accès aux bases de données (ex :
DbContext
), - toute logique métier liée à la durée d'une requête.
services.AddScoped<IRepository, MyRepository>();
AddTransient : une instance à chaque injection
Avec AddTransient
, une nouvelle instance est créée chaque fois que le service est demandé, même dans une même requête.
On l’utilise généralement pour :
- des services très légers,
- des helpers sans état,
- des cas où on a besoin d’objets complètement indépendants.
services.AddTransient<IHelperService, HelperService>();
Aucun commentaire pour l'instant