NestJS未定义的依赖项

时间:2020-05-20 06:46:54

标签: node.js typescript dependency-injection nestjs

我在我的NestJS项目上使用nestjs-i18n8.0.2来国际化字符串。 我的一个模块中有一个具有此构造函数的类:

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

这是完整的课程:

@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是cqrs库@nestjs/cqrs版本6.1.0中的装饰器,如果有帮助的话。

由于某种原因,如果我尝试如图所示注入I18nRequestScopeService,则我的3个依赖项未定义,但是如果删除usersRepository注入,则正确定义了apiServiceI18nRequestScopeService 。 日志中未显示警告或错误。

我使用此构造函数有一个自定义ExceptionFilter

    constructor(private readonly i18n: I18nRequestScopeService) {
    }

它工作正常。

app.module.ts中,我有这个:

@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']),
            ],
        })
    ],
    ...
})

我尝试过搜索该问题,但我没有运气。我想念什么?

1 个答案:

答案 0 :(得分:0)

Nest的CQRS实施不允许范围提供者。 There is an open issue about it here