Ich habe einen @Injectable
Dienst in Bootstrap definiert. Ich möchte die Instanz des Dienstes ohne Verwendung der Konstruktorinjektion erhalten. Ich habe versucht, ReflectiveInjector.resolveAndCreate
aber das scheint eine neue Instanz zu erstellen.
Der Grund, den ich versuche, ist, dass ich eine Basiskomponente habe, die von vielen Komponenten abgeleitet ist. Jetzt muss ich auf einen Dienst zugreifen, aber ich möchte ihn nicht zum ctor hinzufügen, da ich den Dienst nicht auf alle abgeleiteten Komponenten injizieren möchte.
TLDR: Ich brauche eine ServiceLocator.GetInstance<T>()
UPDATE: Aktualisierter Code für RC5 +: Speichern der Injektorinstanz zur Verwendung in Komponenten
@SkipSelf()
. Sie können auch denparent
Getter interagieren , um den Wurzelinjektor zu erhalten.In dem aktualisierten Winkel, in dem ngModules verwendet werden, können Sie eine Variable erstellen, die an einer beliebigen Stelle im Code verfügbar ist:
Jetzt können Sie mit den Funktionen
AppInjector
jeden Dienst in einem beliebigen Code finden.quelle
Ein anderer Ansatz würde darin bestehen, einen benutzerdefinierten Dekorator zu definieren (a
CustomInjectable
, um die Metadaten für die Abhängigkeitsinjektion festzulegen:Es nutzt die Metadaten des übergeordneten Konstruktors anstelle seiner eigenen. Sie können es für die untergeordnete Klasse verwenden:
Siehe diese Frage für weitere Details:
quelle
StoreService .ts
component.ts
quelle