Внедрить провайдера в другого провайдера, тот же модуль # 1250 - PullRequest
0 голосов
/ 31 октября 2018

У меня есть сервис / провайдер, скажем, это вызов ServiceA1 в модуле A, помеченном как @Injectable(). В том же модуле у меня есть другой сервис / провайдер, скажем, это вызов ServiceA2, помеченный как @Injectable().

Я хочу ввести ServiceA1 в ServiceA2 Я пытаюсь с: my service

Этот код выдает ошибку: serviceA1 undefined.

Мой модуль.ts

module.ts

Нужно ли создавать другой модуль для использования serviceA2 в serviceA1?

1 Ответ

0 голосов
/ 31 октября 2018

Если вы вводите услугу непосредственно классом, вам не нужно @Inject():

@Injectable()
export class ServiceA2 {
  constructor(private serviceA1: ServiceA1) {
  }

Это то же самое, что и

@Injectable()
export class ServiceA2 {
  constructor(@Inject(ServiceA1) private serviceA1: ServiceA1) {
  }

Обратите внимание, что вы ввели @Inject('ServiceA1') вместо @Inject(ServiceA1). Это соответствует строковому токену вместо класса и поэтому не может быть разрешено.

Если вы хотите внедрить класс с помощью строкового токена, вам нужно объявить провайдера в вашем модуле следующим образом:

providers: [
    ServiceA2,
    {provide: 'ServiceA1', useClass: ServiceA1},
]

Это также работает в том же модуле.

...