13. Injection de dépendances et options
Sections
Réglages de lecture
Voix naturelle enregistrée pour ce cours, la même dans tous les navigateurs.
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
Code et termes techniques en anglais
Désactivé : la voix de la page lit tout, sans pause entre deux voix.
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
D’autres voix : Microsoft Edge propose des voix naturelles en ligne, et Windows (Paramètres › Heure et langue › Voix), macOS et Android en installent d’autres.
L’injection de dépendances ASP.NET Core est un système de possession. Un lifetime dit combien de temps une instance et son état peuvent être partagés.
Les lifetimes ne sont pas des astuces de performance
Section intitulée « Les lifetimes ne sont pas des astuces de performance »- singleton : une instance racine, thread-safe, sans état scoped capturé ;
- scoped : une instance par scope explicite, normalement une requête HTTP ;
- transient : une instance par résolution, toujours possédée et disposée par son conteneur.
same scope returns same instance: Truesingleton returns same instance: Truedifferent scopes return different instances: Truecaptive scoped dependency rejected: TrueLes keyed services choisissent une implémentation par une clé de composition. Ne pas transformer cette clé en service locator dans le domaine.
Les options forment un contrat
Section intitulée « Les options forment un contrat »IOptions<T> est une vue singleton, IOptionsSnapshot<T> recalcule par scope, IOptionsMonitor<T> observe les changements. Reloadable ne signifie pas sûr : il faut définir ce que voit une opération en vol.
Le programme configure une capacité invalide et observe OptionsValidationException. ValidateOnStart déplace cette erreur au démarrage d’une application hostée.
Exécuter la preuve
Section intitulée « Exécuter la preuve »dotnet run --project code/csharp-advanced/Advanced -c Release -- l13La sortie vérifiée est expected/l13.txt.
Exercices
Section intitulée « Exercices »- Injecter un repository scoped dans un cache singleton et réparer la possession.
- Câbler deux formatters keyed puis déplacer le choix de clé à la composition.
- Recharger une capacité pendant du travail en vol et écrire l’invariant.
Solutions
- Rendre le consommateur scoped, transmettre des données immuables au singleton, ou créer et disposer explicitement un scope dans un coordinateur d’infrastructure.
- Résoudre le service keyed au câblage et injecter un contrat sans clé dans le domaine.
- Appliquer la nouvelle valeur aux nouvelles files ou effectuer une migration explicite avec admission suspendue.