Ich habe die Angular 2.0 docs über Abhängigkeit Inversion gelesen und ich habe auch einige online examples gesucht.Angular 2.0 DI kann ich mich auf Abstraktionen verlassen?
Mein Verständnis ist, dass der @injectable
Dekorator den TypeScript-Compiler mit dem Flag emitDecoratorMetadata
verwendet, um Metadaten zu erstellen, die zum Auflösen von Abhängigkeiten verwendet werden. Nehmen Sie zum Beispiel die folgende Klasse:
Typoskript Compiler emitDecoratorMetadata
über Metadaten zu erklären, verwendet, die die DataService
Klasse einen Konstruktor Argument hat mit Typ Http
.
Sobald wir die Abhängigkeiten einer Klasse deklariert haben @Injectable
verwenden, können wir zeigen, dass es in einigen Komponenten injiziert werden muss, die Provides
Option in den @App
oder @Component
Dekorateure verwenden.
Ich bin mir dessen bewusst das Verhalten von emitDecoratorMetadata
und ich weiß, dass es keine Metadaten für Schnittstellen emittieren kann. Daher gehe ich davon aus, dass ich nicht auf IHttp
statt Http
verlassen kann:
Ist meine Annahme richtig? Kann ich davon abhängen “Depend upon Abstractions. Do not depend upon concretions.” oder ist das etwas, das im Moment nicht möglich ist? Ich nehme an, das wird behoben werden, sobald die emitDecoratorMetadata
Serialisierung von Schnittstellen wird.
Wenn ich eine Zeichenfolge verwende, wie und wo ich die Zeichenfolge auf den tatsächlichen Typ zuordnen? –
Anstatt nur einen Typ zu den Providern in 'bootstrap()' oder Komponenten hinzuzufügen, verwenden Sie 'provide ('someName', {useClass: Http}])' und im Konstruktor '@Inject ('someName') http: IHttp' –