Angeben von Anbietern bei Service in Angular 2

8

Ich versuche, das DI-System von Angular 2 zu verwenden, um die Abhängigkeiten meiner Dienste automatisch zu verarbeiten. Ich möchte eine Anmerkung zum Dienst selbst verwenden, anstatt den zweiten Parameter von bootstrap() zu verwenden, um alle injizierbaren Dienste anzugeben.

Was ich habe

Ein Low-Level-Service:

services/role-store.ts

%Vor%

Ein High-Level-Service, der vom Low-Level-Service abhängt:

services/user-store.ts

%Vor%

Eine Komponente, die vom High-Level-Service abhängt:

components/user-dir.ts

%Vor%

Eine Root-Komponente zum Bootstrap:

app.ts

%Vor%

Das Problem

bootstrap( App, [RoleStore] ) funktioniert, aber ich hätte lieber eine Annotation in user-store.ts , die Angular anweist, RoleStore zu injizieren.

Etwas wie @Provide( RoleStore ) class UserStore {} .

Irgendwelche Ratschläge?

    
Tyler Eich 21.10.2015, 19:27
quelle

2 Antworten

4

providers auf Services werden nicht Ссылка

unterstützt

Stattdessen können Sie Arrays von Providern erstellen, die wie "Module"

exportiert werden %Vor%

und dann in Modulen, die den RoleStore-Service verwenden

%Vor%

und dann im Bootstrap verwenden

%Vor%

Ich gebe zu, dass Sie nicht danach gefragt haben, aber das, was ich am nächsten gefunden habe.

    
Günter Zöchbauer 01.04.2016 10:40
quelle
0

Sie müssen providers immer auf einer bestimmten Ebene registrieren, in Ihrem Fall wäre es sinnvoller, sie auf der Komponentenebene zu registrieren, so dass die Abhängigkeit dort angegeben ist und nicht auf der gesamten Anwendungsebene. So etwas ...

%Vor%

Dies ist die offizielle Methode, die Abhängigkeiten manuell auf dem Angular 2 DI-Mechanismus auf der höchstmöglichen Ebene zu registrieren.

Dazu müssten Sie Ihr eigenes Kompilierzeit / Laufzeit (init) -Tool schreiben, das Code durchläuft alle @Injectable-Dienste sammeln und sie für Sie in Angular 2-Kontext registrieren (indem Sie providers verwenden)

    
tomastrajan 01.04.2016 09:31
quelle

Tags und Links