我在我的 NestJS 项目上使用 nestjs-i18n
版本 8.0.2
来国际化字符串。
我的一个模块中有一个具有此构造函数的类:
constructor(
@InjectRepository(UsersRepository)
private readonly usersRepository: UsersRepository,
private readonly apiService: ApiService,
private readonly i18n: I18nRequestScopeService,
) {
}
这是完整的类(class):
@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
version 6.1.0
的装饰器,如果这有任何帮助的话。
出于某种原因,如果我尝试注入(inject) I18nRequestScopeService
,我的 3 个依赖项是未定义的,但是如果正确定义了 usersRepository
和 apiService
我删除了 I18nRequestScopeService
注入(inject)。
日志中不会显示任何警告或错误。
我有一个带有此构造函数的自定义 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']),
],
})
],
...
})
我试着用谷歌搜索这个问题,但我没有运气。我错过了什么?
最佳答案
Nest 的 CQRS 实现不允许范围内的提供程序。 There is an open issue about it here
关于node.js - NestJS 未定义的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61906755/