node.js - NestJS 未定义的依赖项

标签 node.js typescript dependency-injection nestjs

我在我的 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 个依赖项是未定义的,但是如果正确定义了 usersRepositoryapiService我删除了 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/

相关文章:

javascript - 无法解析 strip Angular 依赖注入(inject)

javascript - 在 Node 中执行回调

sockets - 为什么在 'end' 事件上未定义 socket.remoteAddress?

node.js - 直接在客户端使用watson-developer-cloud Node SDK?

node.js - Mongoose 的分页结果,带有引用文档的过滤器

typescript - 使用 TypeScript 属性描述符替换访问器,同时保留可组合性

angular - 类型错误 : Cannot read property 'flags' of undefined

javascript - 输入 { [键 : string]: string } is not assignable to type { [key: string]: string } | 'undefined'

asp.net-mvc - 依赖注入(inject)在 asp.net MVC 中是必须的吗?

asp.net-mvc - DefaultControllerFactory 与 IDependencyResolver