Множественная реализация абстрактного класса в машинописном тексте для Angular внедрения зависимостей - PullRequest
0 голосов
/ 04 августа 2020

У меня есть абстрактный класс и его реализация

export abstract class IPrint {
    abstract Print(textInput: string): void;
}

export class FilePrint implements IPrint {
    Print(textInput: string): void {
        console.log("File Print");
    }
}

Затем введите Angular DI:

  providers:
    [
      { provide: IPrint, useClass: FilePrint }
    ],

Я могу использовать его следующим образом:

  constructor(private _print: IPrint) { }

  ngOnInit(): void {
    console.log(this._print.Print("HI"))
  }

Теперь я хочу иметь несколько реализаций IPrint

export class ScreenPrint implements IPrint {
    Print(textInput: string): void {
        console.log("Screen Print")
    }
}

Затем введите Angular DI:

  providers:
    [
      { provide: IPrint, useClass: FilePrint },
      { provide: IPrint, useClass: ScreenPrint }
    ],

Когда я хочу использовать IPrint, angular не знает, какую реализацию необходимо использовать:

constructor(private _print: IPrint) { }

1 Ответ

0 голосов
/ 04 августа 2020

angular не знает, какая реализация должна использоваться:

angular знает. Angular будет использовать ScreenPrint. Вы просто переопределяете токен инъекции для IPrint. У вас не может быть одновременно разных реализаций для одного токена внедрения.

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