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);
  }
}

Relaterte artikler