Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Les services peuvent être enregistrés avec une durée de vie temporaire, scopée ou singleton. Choisissez une durée de vie appropriée pour chaque service inscrit.
Transient
Un service avec une durée de vie temporaire est créé chaque fois qu’il est demandé à partir du conteneur de service. Pour inscrire un service en tant que temporaire, appelez AddTransient.
Dans les applications qui traitent les demandes, les services temporaires sont supprimés à la fin de la demande. Cette durée de vie entraîne des allocations par requête, car les services sont résolus et construits à chaque fois. Pour plus d’informations, consultez le guide IDisposables pour les instances temporaires et partagées.
Délimité
Pour les applications web, une durée de vie limitée indique que les services sont créés une fois par demande cliente (connexion). Dans les applications qui traitent les demandes, les services délimités sont supprimés à la fin de la requête. Inscrivez des services délimités en appelant AddScoped.
Note
Lors de l’utilisation d’Entity Framework Core, la méthode d’extension AddDbContext inscrit les types DbContext avec une durée de vie délimitée par défaut.
Un service délimité doit toujours être utilisé à partir d’une étendue, soit d’une étendue implicite (par exemple, l’étendue par requête de ASP.NET Core) soit d’une étendue explicite créée avec IServiceScopeFactory.CreateScope().
Ne résolvez pas un service délimité directement à partir d’un singleton à l’aide d’une injection de constructeur ou en le demandant IServiceProvider dans le singleton. Cela entraîne le comportement du service étendu comme un singleton, ce qui peut entraîner un état incorrect lors du traitement des requêtes suivantes.
Il est acceptable de résoudre un service délimité dans un singleton si vous créez et utilisez une étendue explicite avec IServiceScopeFactory.
Il est également bon de :
- Résoudre un service singleton à partir d’un service délimité ou temporaire.
- Résoudre un service délimité à partir d’un autre service délimité ou temporaire.
Par défaut, dans l’environnement de développement, la résolution d’un service à partir d’un autre service avec une durée de vie plus longue lève une exception. Pour plus d’informations, consultez Validation de l’étendue.
Singleton
Les services de durée de vie Singleton sont créés soit :
- La première fois qu’ils sont demandés.
- Par le développeur, lors de la fourniture d’une instance d’implémentation directement au conteneur. Cette approche est rarement nécessaire.
Chaque requête suivante de l’implémentation de service à partir du conteneur d’injection de dépendances utilise la même instance. Si l’application exige un comportement singleton, autorisez le conteneur de service à gérer le cycle de vie du service. N’implémentez pas le modèle de conception singleton et fournissez du code pour supprimer le singleton. Les services ne doivent jamais être supprimés par le code qui a résolu le service à partir du conteneur. Si un type ou une fabrique est inscrit en tant que singleton, le conteneur supprime automatiquement le singleton.
Enregistrez les services singleton avec AddSingleton. Les services Singleton, sécurisés pour les threads, sont fréquemment utilisés dans les services sans état.
Dans les applications qui traitent les requêtes, les services singleton sont supprimés lorsque ServiceProvider est supprimé lors de l’arrêt de l’application. Étant donné que la mémoire n’est pas libérée tant que l’application n’est pas arrêtée, pensez à la gestion de la mémoire avec un service singleton.