внедрение зависимостей машинописи в super () - PullRequest
3 голосов
/ 08 октября 2019

У меня есть класс restService, как показано ниже:

@Injectable({
  providedIn: 'root'
})
export class RestService {

  private baseUrl: string;

  constructor(private http: HttpClient) {
    this.baseUrl = environment.jsonServerUrl;
  }
}

, и у меня есть другой класс, расширяющий класс RestService под названием UploaderService, например:

@Injectable({
  providedIn: 'root'
})
export class UploaderService extends RestService {

  constructor() {
    super(); // error occurred here!
  }
}

, но когда я пишу ошибку метода superпроизошло, потому что класс RestService имеет Dependency Injection в своем конструкторе, и я не знаю, как я могу внедрить это в супер. Как я могу это исправить?

Ответы [ 3 ]

4 голосов
/ 08 октября 2019

Вам нужно пройти через инъекцию

@Injectable({
  providedIn: 'root'
})
export class UploaderService extends RestService {

  constructor(http: HttpClient) {
    super(http);
  }
}
3 голосов
/ 08 октября 2019

Параметры суперкласса необходимо повторить и передать супер-вызову:

@Injectable({
    providedIn: 'root'
})
export class UploaderService extends RestService {
  constructor (http: HttpClient){
    super(http);
  }
}
1 голос
/ 08 октября 2019

Вы можете повторить параметры, как показано в других ответах.

Однако есть и другой способ, который удобен, когда у вас много параметров и расширенных классов: используйте Injector, чтобы получить зависимости вбазовый класс.

Затем вам нужно будет только повторить инъекцию «Инжектор» в производных классах, что может сэкономить много места и разум, когда у вас есть много сервисов для внедрения в базовый класс, но не много. в производном классе.

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);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...