есть необязательный аргумент и он типизирован как стринг, но в свойство inject вторым параметром передан обьект?
2. почему в Providers передается OptionsProvider?
const connectionProvider = {
provide: 'CONNECTION',
useFactory: (optionsProvider: OptionsProvider, optionalProvider?: string) => {
const options = optionsProvider.get();
return new DatabaseConnection(options);
},
inject: [OptionsProvider, { token: 'SomeOptionalProvider', optional: true }],
// \_____________/ \__________________/
// This provider The provider with this
// is mandatory. token can resolve to `undefined`.
};
@Module({
providers: [
connectionProvider,
OptionsProvider,
// { provide: 'SomeOptionalProvider', useValue: 'anything' },
],
})
export class AppModule {}
1. в свойстве inject вторым параметром передан обьект, который скажет ioc контейнеру nestjs, достань мне пожалуйста по ключу 'SomeOptionalProvider' то, что лежит в ioc, а там как раз таки может лежать строка. В твоём случае там лежит строка 'anything' 2. что бы ты мог выполнить как раз таки выполнить inject, сначала ты регистрируешь в своих providers какие то значения под токенами. Потом их через inject засовываешь внутрь фабрики
Вот еще пример из доки, почему тут нет в провайдерах OptionsProvider? const connectionFactory = { provide: 'CONNECTION', useFactory: (optionsProvider: OptionsProvider) => { const options = optionsProvider.get(); return new DatabaseConnection(options); }, inject: [OptionsProvider], }; @Module({ providers: [connectionFactory], exports: ['CONNECTION'], }) export class AppModule {}
Обсуждают сегодня