DI constructeur avec paramètres optionnels
Mon constructeur a des paramètres optionnels et ils semblent mess avec la principale façon de faire DI.
constructor(public name:string, public age?:number, private _service:Service);
Tapuscrit naturellement n'aime pas que j'ai mis non paramètre facultatif derrière une option, de plus le service n'a pas obtenir injecté lorsque le paramètre facultatif n'est pas définie. Comment puis-je résoudre ce problème? Je ne peux pas le mettre quelque part d'autre dans le constructeur, puisque j'allais être prévu paramètre le service manuellement.
Est là quelque chose comme champ d'injection?
@Inject() private _service:Service;
constructor(public name:string, public age?:number);
Dois-je remplacer l'option paramètres avec des valeurs par défaut? Toutes les autres suggestions?
EDIT:
Comme discuté ci-dessous, j'ai essayé d'injecter un service dans un objet qui n'est pas créé par Angulaire de la DI. Cela ne fonctionne pas. Puisque je ne peux pas créer cette classe (modèle) à l'aide de DI maintenant, je passe le service manuellement à partir de la classe qui instancie ce objets.
OriginalL'auteur KenavR | 2016-04-06
Vous devez vous connecter pour publier un commentaire.
Il suffit d'ajouter le
@Facultatif()
décorateur avant le paramètre dans le constructeur qui doit être injecté uniquement si il y avait un fournisseur inscrit.new Person("Mike", 32);
et laService
devriez obtenir injecté indépendantes de paramètre de l'âge ou pas. Ou dois-je tout simplement besoin d'annoter chaque option (TS=?) avec @Facultatif()?Pas sûr que je comprends de votre question. Avec
new Person("Mike", 32)
il n'existe pas d'injection de dépendance. DI n'intervient que lorsque les instances sont créées par DI lui-même. Par exemple, des composants et de ses dépendances sont instanciés par DI. Pouvez-vous préciser?"DI n'intervient que lorsque les instances sont créées par DI lui-même." Je suppose que c'est mon "problème" ou d'une chose que je ne comprenais pas. Je créer les objets de régler manuellement le nom et l'âge en utilisant le constructeur. Je pensais que le DI permettrait d'injecter de l'autre des paramètres avec un fournisseur enregistré. Devinez qui ne fonctionne pas.
Le
Person
classe n'est pas injectable, donc j'ai cette ins est pas une option. Personne est juste une classe de modèle avec une fonction de sauvegarde qui a besoin d'un service qui, je l'ai aimé à injecter. Je suppose que j'ai besoin de restructurer la classe ou le service d'une autre manière.si vous obtenez
private _service:Service
injecté à la composante où vous souhaitez créer unnew Person()
, alors vous pouvez simplement fairenew Person("Mike", 32, this._service)
(toujours pas sûr si ce est l'endroit où vous voulez passer le service à tout de même).OriginalL'auteur
Si je comprends bien ce que vous essayez de le faire, vous avez besoin d'un service de l'usine. Voir ici: https://angular.io/docs/ts/latest/guide/dependency-injection.html#factory-provider
Fondamentalement,
Et puis
Et puis vous devez fournir à votre service comme celui-ci:
OriginalL'auteur