首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NestJS i18n如何将服务注入I18nResolver

NestJS i18n如何将服务注入I18nResolver
EN

Stack Overflow用户
提问于 2022-02-20 18:27:13
回答 2查看 906关注 0票数 1

如何将服务注入nestjs-i18n I18nResolver

文档声明:

要实现自己的解析器(或自定义逻辑),请使用I18nResolver接口。解析器是通过nestjs依赖注入提供的,这样您就可以在需要时注入您自己的服务。

我的救世主看起来如下:

代码语言:javascript
运行
复制
// AppLanguageResolver.ts


import {ExecutionContext, Inject, Injectable, Scope} from "@nestjs/common";
import {I18nResolver} from "nestjs-i18n";
import {UserService} from "@root/services/user-service/user.service";

@Injectable()
export class AppUserLanguageResolver implements I18nResolver {
    constructor(private userService: UserService) {}

    resolve(context: ExecutionContext): Promise<string | string[] | undefined> | string | string[] | undefined {
        console.log("AppUserLanguageResolver");
        return undefined;
    }

}

在我的app.module.ts中,ive添加了模块配置:

代码语言:javascript
运行
复制
// app.module.ts

@Module({

  providers: [
    UserService,
    AppUserLanguageResolver,
  ],
  imports: [
    I18nModule.forRoot({
      fallbackLanguage: 'en',
      parser: I18nJsonParser,
      parserOptions: {
        watch: APP_ENV === AppEnv.Dev,
        path: path.join(__dirname, '/i18n/translations'),
      },
      resolvers: [
        AppUserLanguageResolver
      ]
    }),
  ]

});

但运行该应用程序告诉我,nesjs无法解决依赖关系:

代码语言:javascript
运行
复制
[Nest] 5876   - 20/02/2022, 19:21:58   [ExceptionHandler] Nest can't resolve dependencies of the AppUserLanguageResolver (?). Please make sure that the argument UserService at index [0] is available in the I18nModule context.
                                                                                                                                                                                                                                 
Potential solutions:                                                                                                                                                                                                             
- If UserService is a provider, is it part of the current I18nModule?                                                                                                                                                            
- If UserService is exported from a separate @Module, is that module imported within I18nModule?                                                                                                                                 
  @Module({                                                                                                                                                                                                                      
    imports: [ /* the Module containing UserService */ ]                                                                                                                                                                         
  })
 +17ms
Error: Nest can't resolve dependencies of the AppUserLanguageResolver (?). Please make sure that the argument UserService at index [0] is available in the I18nModule context.

Potential solutions:
- If UserService is a provider, is it part of the current I18nModule?
- If UserService is exported from a separate @Module, is that module imported within I18nModule?
  @Module({
    imports: [ /* the Module containing UserService */ ]
  })

    at Injector.lookupComponentInParentModules (D:\dev\projects\project\workspace\packages\app-backend\node_modules\@nestjs\core\injector\injector.js:192:19)
    at async Injector.resolveComponentInstance (D:\dev\projects\project\workspace\packages\app-backend\node_modules\@nestjs\core\injector\injector.js:148:33)
    at async resolveParam (D:\dev\projects\project\workspace\packages\app-backend\node_modules\@nestjs\core\injector\injector.js:102:38)
    at async Promise.all (index 0)
    at async Injector.resolveConstructorParams (D:\dev\projects\project\workspace\packages\app-backend\node_modules\@nestjs\core\injector\injector.js:117:27)
    at async Injector.loadInstance (D:\dev\projects\project\workspace\packages\app-backend\node_modules\@nestjs\core\injector\injector.js:81:9)
    at async Injector.loadProvider (D:\dev\projects\project\workspace\packages\app-backend\node_modules\@nestjs\core\injector\injector.js:38:9)
    at async Promise.all (index 15)
    at async InstanceLoader.createInstancesOfProviders (D:\dev\projects\project\workspace\packages\app-backend\node_modules\@nestjs\core\injector\instance-loader.js:43:9)
    at async D:\dev\projects\project\workspace\packages\app-backend\node_modules\@nestjs\core\injector\instance-loader.js:28:13

UserService被注入到Scope.Request中,但是移除或更改作用域没有任何效果。我也没有发现有关这一问题的任何资料。

我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2022-02-20 18:49:40

也许你忘了出口UserService了。

票数 0
EN

Stack Overflow用户

发布于 2022-06-26 16:49:01

作为参数传递给nestjs-i18n自定义解析器的构造函数的服务必须是全局的,才能访问。因此,在您的情况下,您应该使您的用户模块是全局的,然后一切都将按预期工作。

例如,在用户模块文件中,您应该执行如下操作:

代码语言:javascript
运行
复制
//user.module.ts

import { Global, Module } from '@nestjs/common';

@Global() // <----- Add this
@Module( {
  imports: [ TypeOrmModule.forFeature( [ User ] ) ],
  controllers: [ UserController ],
  providers: [ UserService ]
} )
export class UserModule { }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71197454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档