28 votes

Angular 2: Injectez le service à un autre service. (Aucune erreur de fournisseur)

Je souhaite injecter un service dans un autre service:

 @Injectable()

export class Dispatcher {
}


@Injectable()

export class TodoStore {

    constructor(@Inject(Dispatcher) dispatcher:Dispatcher){ 

    }
}
 

Mais je reçois toujours une erreur: aucun fournisseur pour Dispatcher!

Merci.

33voto

Abdulrahman Points 12886

Vous avez besoin d' provide votre service quelque part. Veuillez vous référer à angular2 docs

Vous pourriez fournir à la méthode de démarrage:

bootstrap(AppComponent,[TodoStore,Dispatcher]);

ou l'application de la composante:

@Component({
    ...
      providers:[TodoStore,Dispatcher]
}
...

Ou dans tout autre composant, en fonction de vos besoins.

Aussi, vous n'avez pas besoin d' @Inject(Dispatcher) dans le constructeur. C'est essentiellement le même que

constructor(dispacher:Dispatcher){
}

Ah oui, bienvenue ALORS :)

6voto

Ian Zhang Points 203

Merci pour la réponse.

Puisqu'il ne s'agit pas d'un composant, la solution @Component (...) ne s'applique pas.

 bootstrap(AppComponent,[TodoStore,Dispatcher]); 
 

solution fonctionne. Mais cela fait de ce main.ts une place centrale.

1voto

Fabrice Jumarie Points 11

Un tableau de fournisseurs est disponible dans @NgModule. Vous pouvez fournir votre service en déclarant votre service dans ce tableau.

 @NgModule({
    declarations:[...],
    imports:[...],
    providers: [MyCustomService],
    bootstrap:[AppComponent]
})
 

-7voto

Akk3d1s Points 69

Essaye ça:

myMainService.ts

 import { myOtherService } from 'myOtherService';

export class myMainService {
 constructor() {
   let myOtherService = new myOtherService();
 }
}
 

myOtherService.ts

 export class myOtherService {
    constructor() {
        console.log('service was imported');
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X