2016-11-03 3 views
2

Ich implementiert http Interceptor-Dienst, es funktioniert, aber mein Problem ist, ich kann nicht herausfinden, wie man meinen eigenen Dienst in der Deklaration zu injizieren.Angular 2: Kann nicht injizieren Dienst in Anbietern mit useFactory

Ich bekomme Laufzeitfehler: No provider for MyService in der Konsole.

Httpservice Interzeptorklasse:

// all the imports... 

@Injectable() 
export class HttpService extends Http { 
    constructor(backend: ConnectionBackend, 
       defaultOptions: RequestOptions, 
       private router: Router, 
       private injector: ReflectiveInjector, 
       private myService: MyService){ 
    super(backend, defaultOptions); 
    } 

    // methods... 

In meinem app.module.ts, ich habe eine Reihe von Anbietern:

[ 
{ 
    provide: 'MyService', 
    useClass: MyService 
}, 
{ 
    provide: 'Http', 
    useFactory: (xhrBackend: XHRBackend, 
       requestOptions: RequestOptions, 
       router: Router, 
       injector: ReflectiveInjector, 
       myService: MyService) => 
     new HttpService(xhrBackend, requestOptions, router, injector, myService), 
    deps: [XHRBackend, RequestOptions, Router, Injector, MyService] 
}] 

ich mehrere SO Fragen/Antworten überprüft haben, aber couldn‘ t finden Sie ein ähnliches Beispiel ..

Danke!

Antwort

3

deps sagt nur, welche Abhängigkeiten die Fabrik erfordert (damit sie richtig injiziert werden können). Aber es liefert nicht wirklich die Abhängigkeit. Sie müssen noch an die providers Array hinzufügen

providers: [ 
    MyService, 
    { 
    provide: 'Http', 
    ... 
    } 
] 
+0

ich meine Frage aktualisiert haben, so dass Sie anpassen können, wurde ich mit {liefern: ‚MyService‘, useClass: MyService}, in meinem Provider Array, sondern setzen MyService nur (wie du vorgeschlagen hast) gearbeitet! –

Verwandte Themen