Ich versuche, eine einfache Angular2-App zu verkabeln, die den HTTP-Dienst verwendet. (Die meisten Tutorials, die ich gesehen habe, tun dies, indem sie Component
den Service Http
konsumieren, was falsch erscheint, wenn sich die grundlegende Philosophie der Thin Controller nicht geändert hat - aber das ist eine andere Frage.)
Ich möchte einen Dienst erstellen, der Angulars Http
Dienst verwendet. Aber ich kann nicht herausfinden, wie man den Dienst Http
anders als diesen injiziert:
boot.ts:
%Vor%myService.ts:
%Vor% Das funktioniert, aber es scheint sehr falsch zu sein, dass der Benutzer des Dienstes die Abhängigkeiten des Dienstes kennt und sie in den Bootstrap-Prozess einfügen muss. Es scheint so, als ob es eine Möglichkeit gäbe, ein providers
-Array direkt an einen Dienst zu übergeben, genauso wie eine Komponente, aber ich kann es nicht finden. Fehle ich gerade etwas?
Aktualisieren
Wenn also ein Eltern-Injektor eine Implementierung für OtherService
bereitstellt, wird diese verwendet, andernfalls wird OtherServiceImpl
verwendet (Standard).
Wenn Sie einen anderen wie
bereitstellen %Vor% OtherServiceImpl2
wird verwendet.
Siehe auch Ссылка
Original
Sie könnten einfach den http
-Dienst optional machen (indem Sie die @Optional()
Annotation verwenden) und wenn keine angegeben ist, erstellen Sie einfach eine Instanz innerhalb des Konstruktors mit new Http()
.
Auf diese Weise muss der Benutzer nicht über die Dienstabhängigkeiten Bescheid wissen, kann jedoch bei Bedarf alternative Implementierungen übergeben (z. B. zum Testen).
Wenn zum Erstellen der Abhängigkeit innerhalb des Service DI selbst benötigt wird, können Sie einen Injektor injizieren und ihn verwenden, um Abhängigkeiten zu erhalten.
Siehe auch optionale Abhängigkeiten in Ссылка
Was auch funktionieren könnte (habe ich selbst noch nicht versucht), ist einfach einen Kind-Injektor zu erstellen und ihn anzuweisen, sich selbst zu überspringen
Aus der Dokumentation SkipSelfMetadata
Ich weiß noch nicht, ob das immer noch von "selbst" gelöst wird, wenn Eltern den angeforderten Typ nicht bereitstellen können.
Tags und Links dependency-injection angular