Возможно ли внедрение зависимостей при использовании нового оператора? - PullRequest
1 голос
/ 04 октября 2019

На самом деле я хочу реализовать какой-то шаблон стратегии. Точнее, я хочу решить во время выполнения, какой класс создавать.

Конечно, это довольно просто.

if(...) {
this.service = new ServiceA();
} else {
this.service = new ServiceB();
}

Но что, если ServiceA и ServiceB используют внедрение зависимостей в своих классах? Нужно ли мне передавать эти экземпляры или есть более удобный способ, чтобы гнездо могло их автоматически вводить?

1 Ответ

2 голосов
/ 04 октября 2019

Вы можете внедрить обе службы и затем динамически назначить их вашей переменной:

service: Service;
constructor(private serviceA: ServiceA, private serviceB: ServiceB) {}

dynamicMethod() {
  if (...) {
    this.service = this.serviceA;
  } else {
    this.service = this.serviceB;
  }
}


Если условие может быть оценено при запуске (например, переменные среды), вы можете использовать customпровайдер вместо.
...