Отключить DI в Angular - PullRequest
       1

Отключить DI в Angular

0 голосов
/ 28 августа 2018

У меня есть базовый класс (обычный класс TS без @Injectable() декоратора), который будет расширен в классе обслуживания (инъекция). Но проблема в том, что Angular принимает параметры конструктора как инъекцию зависимостей. И это дает мне ошибку, так как базовый класс не является инъекционным.

Я хотел бы иметь что-то вроде этого:

class BaseClass {
  private param1: OtherBaseClass;

  constructor(param1: OtherBaseClass) {
    // Extended class should give reference to the injected service
    this.param1 = param1;
  }
}

@Injectable({ providedIn: 'root' })
class ExtendedBaseClass {
  constructor(private extendedOtherBaseClass: ExtendedOtherBaseClass) {
    super(extendedOtherBaseClass);
  }
}

Конечно, отключение DI должно влиять только на базовые классы, а не на все приложение.
Это возможно?
Создание базовых классов для инъекций не вариант, так как я не смогу перезаписать методы в расширенном классе.

1 Ответ

0 голосов
/ 29 августа 2018

Хорошо, похоже, я нашел ответ.
Я могу установить декоратор @Injectable() для базового класса без { providedIn: 'root' } (и без добавления этого класса в провайдеры модуля). Это позволяет вам иметь синтаксис внедрения в конструкторе базового класса (который будет «перезаписан» в расширенном классе), но в то же время перезаписанные методы будут работать и в расширенном классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...