В NestJs, как внедрить сервис на основе его интерфейса? - PullRequest
0 голосов
/ 23 декабря 2019

У меня есть следующий модуль: payment.module.ts

@Module({
  controllers: [PaymentController],
})
export class PaymentModule {}

И в следующем сервисе я хочу получить доступ к сервису на основе интерфейса

payment.service. ts

export class PaymentService {
   constructor(private readonly notificationService: NotificationInterface,
}

messages.interface.ts

export interface NotificationInterface {
  // some method definitions
}

messages.service.ts

@Injectable()
export class NotificationService implements NotificationInterface {
  // some implemented methods
}

Вопрос в том, как ввести NotificationService на основеNotificationInterface

1 Ответ

1 голос
/ 23 декабря 2019

Это решение, которое я нашел ... использование интерфейсов в качестве типов значений невозможно, поскольку они существуют только во время разработки. После переноса интерфейсы больше не существуют, что приводит к пустым значениям объекта. Существует решение для вашей проблемы, хотя использование строковых ключей в качестве значений и декоратор ввода:

payment.module.ts

@Module({
  providers: [
    {
      provide: 'NotificationInterface',
      useClass: NotificationService
    }
  ]
})
export class PaymentModule {}

payment.service.ts

export class PaymentService {
   constructor(@Inject('NotificationInterface') private readonly notificationService: NotificationInterface,
}
...