Registre des injectables
Les fournisseurs de solutions injectables connu Angulaire de la DI et de définir la portée d'une injectable (service).
Hiérarchie des injecteurs
Angulaire DI crée un arbre d'injecteurs (parent > enfant > un petit-enfant >...) qui ressemble à la structure de vos éléments et des directives.
Seule instance par le fournisseur
Les fournisseurs sont gérés par l'injecteur. Chaque fournisseur propose une seule instance d'un produit injectable.
Fournisseur de recherche
Lorsqu'un composant ou directive dispose d'une dépendance (paramètre du constructeur), DI se lance à la recherche sur cette composante de l'injecteur pour les fournisseurs. Si elle en a un, il demande à l'instance de ce fournisseur et l'injecte.
Si l'injecteur n'ont pas de fournisseur de la clé demandée (type), alors le parent de l'injecteur est visité, jusqu'à la racine ("bootstrap") jusqu'à ce qu'un fournisseur est trouvé et son instance peut être injecté. (Si aucun fournisseur n'est trouvé DI renvoie une erreur).
Définir la portée d'une injectable exemple
De cette façon, vous pouvez définir l'étendue d'un service partagé, parce que DI se lance à la recherche de l'élément où une instance est demandé à la hausse jusqu'à en trouver un.
Singleton ou pas
Combien de places vous fournir un produit injectable détermine combien d'instances seront créées (ils ne sont instanciés si effectivement demandé).
Si vous voulez une instance unique pour l'ensemble de votre demande, puis de fournir un produit injectable seulement une fois à la racine du composant (ou avec bootstrap(AppComponent, [...])
ce qui entraîne le même comportement.
Si vous voulez une nouvelle instance pour chaque composant A
, puis l'ajouter à des fournisseurs de la composante A
.
(mise à jour) NgModule paresseux et non paresseux
Avec l'introduction de l' NgModule
modules, des niveaux supplémentaires ont été introduites. Les fournisseurs inscrits auprès de non-chargement paresseux modules sont au-dessus du composant racine de la hiérarchie.
Chargement paresseux modules sont au-dessus des composants et des directives chargé par ces composants.
Parce que les fournisseurs sont en lecture seule après un injecteur est créé, il n'y a aucun moyen d'ajouter des fournisseurs de paresseux les modules chargés à la racine de l'injecteur. Donc, paresseux modules chargés d'obtenir leurs propres racines de la portée.
Voir aussi https://stackoverflow.com/a/45231440/217408