У меня есть бэкэнд, написанный на Nest.js.После добавления некоторых новых служб, я получаю эту ошибку при запуске:
Error: Nest can't resolve dependencies of the SomeService1 (+, +, ?, +, +, +, +). Please verify whether [2] argument is available in the current context.
- Проблема заключается в том, что аргумент
[2]
этой службы - другой поставщик, расположенный в том же модуле . - Я думаю, что в приложении нет циклических зависимостей.
- Я написал быстрый скрипт для генерации графа зависимостей, и он действительно не имеет циклов.
- Но: если я добавлю
@Inject(forwardRef(() => SomeService2)
перед упомянутым введенным аргументом [2]
, приложение волшебным образом начнет работать ... - В базе кода нет других
forwardRef
s.
Что я могу сделать сейчас, чтобы проверить источник проблемы? (проще, чем случайное комментирование некоторых deps и посмотреть, работает ли оно;)) Я думал, что единственными причинами могут быть:
- циклические операции deps
- с использованием провайдераиз другого модуля, не указанного в разделе
exports:
- , с использованием поставщика, не указанного в разделе
providers:
модуля
Ничего из вышеперечисленного не относится к моему приложению.Какие еще причины могут быть?К сожалению, я не могу публиковать источники, но я могу предоставить некоторые детали, если я знаю, что искать.
Конструктор SomeService0
:
constructor(
private readonly ...: OtherService1,
private readonly reporter: EventReporter,
// @Inject(forwardRef(() => SomeService2)) // works if I uncomment this!
private readonly ...: SomeService2,
private readonly ...: SomeService3,
private readonly ...: EvenOtherService1,
@Inject(eventBusProviderToken)
eventBus: EventBus,
) {
Объявление SomeModule
с именами изменилось так же, как в приведенном выше конструкторе:
@Module({
imports: [
OtherModule,
EvenOtherModule,
<...more imports>
],
controllers: [
SomeController,
],
providers: [
SomeService0,
SomeService1,
SomeService2,
SomeService3,
SomeService4,
],
exports: [
SomeService3,
],
})
export class SomeModule {}