Как реализовать подклассы провайдеров, которые используют других провайдеров? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть абстрактный провайдер (это несколько подклассов этого провайдера, расширяющего его), который использует 2 сервиса, и я хочу передать эти сервисы в подклассы этого абстрактного класса, желательно без необходимости указывать их каждый раз, когда я делаюэкземпляр подкласса.

Я попробовал следующее:

export abstract class TransactionConstructor {

  protected constructor(private readonly conversionService: ConversionService,
                        private readonly formatService: FormatService) {
  }
}

@Injectable()
export class TransactionConstructorBTC extends TransactionConstructor {

  protected constructor(conversionService: ConversionService,
                        formatservice: FormatService) {
    super(conversionService, formatService);
  }

  public create() {
    return new TransactionConstructorBTC();
  }
}

@Injectable()
export class TransactionConstructorETH extends TransactionConstructor {

  protected constructor(conversionService: ConversionService,
                        formatservice: FormatService) {
    super(conversionService, formatService);
  }

  public create() {
    return new TransactionConstructorETH();
  }
}

Итак, контроллер получает запрос @Get (), а затем в зависимости от информации, содержащейся в этом запросе, Я хочу сделать TransactionConstructorBTC или TransactionConstructorETH (или другие позже).

Но я не хочу каждый раз вводить convertService и formatService в конструктор, я хочу, чтобы эти подклассы получали теуслуги из родительского абстрактного класса.

Я хочу быть в состоянии сделать это:

transactionConstructor: TransactionConstructor;
transactionConstructor = new TransactionConstructorBTC();

Но это "старый путь".Как добиться этого "nestjs"?Мол, абстрактный экземпляр TransactionConstructor не может быть создан, но я хочу, чтобы Контроллер владел этим абстрактным свойством и установил для него требуемый подкласс.

...