Nest не может разрешить зависимости внутри одного модуля? - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть бэкэнд, написанный на 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 {}
...