node.js - NestJS odefinierade beroenden


Jag använder nestjs-i18n version 8.0.2 i mitt NestJS-projekt för att internationalisera strängarna. Jag har en klass i ett av mina moduler som har denna konstruktor:

    constructor(
        @InjectRepository(UsersRepository)
        private readonly usersRepository: UsersRepository,
        private readonly apiService: ApiService,
        private readonly i18n: I18nRequestScopeService,
    ) {
    }

Detta är hela klassen:

@QueryHandler(MyQuery)
export class MyQueryHandler implements IQueryHandler<MyQuery> {

    constructor(
        @InjectRepository(UsersRepository)
        private readonly usersRepository: UsersRepository,
        private readonly apiService: ApiService,
        private readonly i18n: I18nRequestScopeService,
    ) {
    }

    async execute(query: MyQuery): Promise<MyResult> {
        ...
    }
}

QueryHandler är en dekoratör från cqrs-biblioteket @nestjs/cqrs version 6.1.0, om detta kan vara till någon hjälp.

Av någon anledning är mina 3 beroenden odefinierade om jag försöker injicera I18nRequestScopeService som visas, men usersRepository och apiService är korrekt definierade om jag tar bort I18nRequestScopeService-injektionen. Inga varningar eller fel visas i loggen.

Jag har ett anpassat ExceptionFilter med denna konstruktor:

    constructor(private readonly i18n: I18nRequestScopeService) {
    }

och det fungerar precis som det ska.

I app.module.ts har jag detta:

@Module({
    imports: [
        ...
        I18nModule.forRoot({
            fallbackLanguage: 'en',
            parser: I18nJsonParser,
            parserOptions: {
                path: path.join(__dirname, 'i18n/'),
            },
            resolvers: [
                { use: QueryResolver, options: ['lang', 'locale', 'l'] },
                new HeaderResolver(['x-custom-lang']),
                AcceptLanguageResolver,
                new CookieResolver(['lang', 'locale', 'l']),
            ],
        })
    ],
    ...
})

Jag försökte googla problemet, men jag hade ingen lycka. Vad missar jag?

Svar #1

Nests implementering av CQRS tillåter inte scoped providers. Det finns en öppen fråga om det här