angular - typescript avhengighetsinjeksjon i super()
Jeg har en klasse kalt restService som vist nedenfor:
@Injectable({
providedIn: 'root'
})
export class RestService {
private baseUrl: string;
constructor(private http: HttpClient) {
this.baseUrl = environment.jsonServerUrl;
}
}
og jeg har en annen klasse som utvider RestService-klassen kalt UploaderService slik:
@Injectable({
providedIn: 'root'
})
export class UploaderService extends RestService {
constructor() {
super(); // error occurred here!
}
}
men når jeg skriver super-metoden, oppstod en feil fordi RestService-klassen har avhengighetsinjeksjon i konstruktøren sin, og jeg vet ikke hvordan jeg kan injisere det i super. Hvordan kan jeg fikse det?
Svar #1
Du kan gjenta parameterne, som vist i andre svar.
Det finnes en annen måte, dog, som er praktisk når du har mange parametere og utvidede klasser: bruk Injector for å få avhengighetene i basisklassen.
Da trenger du bare å gjenta "Injector"-injeksjonen i avledede klasser, noe som kan spare mye plass og mental helse når du har mange tjenester å injisere i basis-klassen, men ikke mange i den avledede klassen.
import { MyService } from './my.service';
import { FooService } from './foo.service';
import { Injector } from '@angular/core';
export class Base {
protected myService: MyService;
protected fooService: FooService;
constructor (protected injector: Injector) {
this.myService = injector.get(MyService);
this.fooService = injector.get(FooService);
}
}
export class Derived extends Base {
constructor(protected injector: Injector) {
super(injector);
}
}
Svar #2
Du må gå gjennom injeksjonen
@Injectable({
providedIn: 'root'
})
export class UploaderService extends RestService {
constructor(http: HttpClient) {
super(http);
}
}
