2016-07-10 9 views
0

Ich möchte einen Dienst in einen anderen Dienst einfügen, aber aus irgendeinem Grund wird der "@Inject" Dekorator ignoriert. Zum Beispiel hängt der folgende Dienst auf einem anderen Dienst:Injizieren Sie einen Dienst in einen anderen Dienst

@Injectable() 
class MyService { 
    final AnotherService _service; 
    MyService(@Inject(AnotherService) this._service); 
// ... more methods 
} 

Angular2 führt den folgenden Fehler:

ORIGINAL EXCEPTION: No provider for AnotherService!

Bin ich den „@Inject“ Dekorateur in einem schlechten Weg mit?

+0

Haben Sie 'import {Inject} von 'angular2/core' importiert?'? – AngJobs

+0

Die Ausnahme impliziert, dass er es tat ... es ist eine kantige Ausnahme. –

Antwort

3

Einige Informationen fehlen dies sagt aber Ausnahme vollständig zu lösen, dass der Injektor nicht genügend Informationen AnotherService

Die DI in Winkeln zu lösen hat, ist auf Hierarchien aufzubauen, von der Wurzel Injektor beginnen, die erzeugt wird auf einem eckigen Anwendung Bootstrap.

Jede Hierarchie ist eine neue Injektorinstanz, die eine Abhängigkeit von unten nach oben auflöst, d. H. Wenn ein Injektor das Problem nicht lösen kann, wird der Elternteil zur Lösung aufgefordert. Dies wird fortgesetzt, bis es einen Injektor ohne einen Elternteil (Wurzelinjektor) erreicht.

Achten Sie darauf, einen Anbieter für AnotherService deklarieren, bevor Sie einen Anbieter für MyService erklären.

Fügen Sie einfach einen Anbieter AnotherService in der Provider-Array Sie Bootstrap liefern.

+0

Danke für Ihre Antwort. Es war was ich vermutete. Ich frage mich, was der Zweck der @Inject() - Direktive ist, da sie weggelassen werden kann und nichts tut. – Cequiel

+1

Der '@ Inject'-Decorator ermöglicht (unter anderem) die Injektion von String-Tokens (im Gegensatz zu Type-Token), siehe OpaqueToken. Beachten Sie auch, dass, wenn Sie '@ Injectable' auf eine Klasse erklären Ihnen sagen, die Injector sagen, dass diese Klasse eingespritzt werden kann, so dass die' @ Inject' redundanten für typisierten Tokens (Sie müssen noch für String-Token) –