Comment injecter de Service dans la classe (pas de composant)
Je veux injecter de service dans la classe qui n'est pas componet.
Par exemple
Myservice
import {Injectable} from '@angular/core';
@Injectable()
export class myService{
dosomething(){
//implementation
}
}
MyClass
import { myService } from './myService'
export class MyClass{
constructor(private myservice:myService){
}
test(){
this.myservice.dosomething();
}
}
cette solution ne fonctionne pas (je pense, car Maclasse n'a pas encore instanciée).
Est-il une autre manière d'utiliser le service en classe(pas de composant)? ou c'est mal comment je code de conception (pour utiliser le service pas à une classe de composant)
Merci.
Vous devez vous connecter pour publier un commentaire.
Injections ne fonctionne qu'avec des classes qui sont instanciés par Angulars l'injection de dépendance (DI).
@Injectable()
àMyClass
etMyClass
commeproviders: [MyClass]
dans un composant ou NgModule.Lorsque vous ensuite injecter de l'
MyClass
quelque part, unMyService
instance est transmis àMyClass
lorsqu'il est instancié par DI (avant de l'utiliser la première fois).De cette façon
myClass
sera unMyClass
exemple, instancié par Angulars DI, etmyService
sera injecté àMyClass
lorsqu'il est instancié.Voir aussi L'obtention de la dépendance de l'Injecteur manuellement à l'intérieur d'une directive
private
n'est pas nécessaire, parce queinjector
n'est pas utilisé en dehors du constructeur, donc pas besoin de garder une référence dans un domaine.Pas une réponse directe à la question, mais si vous êtes la lecture de ce DONC pour cette raison que je suis, cela peut aider...
Disons que vous êtes à l'aide de ng2-translate et vous voulez vraiment que votre
User.ts
classe à l'avoir. Vous êtes immédiate de la pensée est d'utiliser DI placer, vous faites Angulaire, après tout. Mais c'est un peu de l'avoir à y penser, vous pouvez passer à votre constructeur, ou à en faire une variable publique de la composante (où vous probablement avez-DI dans).par exemple:
puis, à partir de certaines liées à l'utilisateur, composant injecté TranslateService
J'espère que cela aide ceux qui comme moi étaient sur le point d'écrire beaucoup plus difficile le maintien de code, parce que nous sommes trop intelligent, parfois,=]
(NOTE: la raison pour laquelle vous pouvez définir une variable au lieu de faire partie de votre méthode constructeur est vous pourriez avoir des cas où vous n'avez pas besoin d'utiliser le service, afin de toujours être tenu à faire passer dans signifierait l'introduction supplémentaire des importations/code qui ne sont jamais vraiment utilisé)
translateService
un get / set où leget
renvoie une erreur significatif au lieu d'un NullReference exception si vous avez oublié de le mettreC'est le genre de (très) hacky, mais j'ai pensé que je devais partager ma solution. Notez que cela ne fonctionne qu'avec Singleton services (injecté à la racine d'application, pas de composant!), depuis ils vivent aussi longtemps que votre application, et il n'y a qu'une seule instance d'eux.
Tout d'abord, dans votre service:
Ensuite à toute la classe:
Cette solution est bonne si vous voulez réduire l'encombrement de code et ne l'utilisez pas non-singleton services de toute façon.