【问题标题】:Do NestJS ConfigService needs DI?NestJS ConfigService 需要 DI 吗?
【发布时间】:2022-01-02 17:41:54
【问题描述】:

所以我有一个带有CustomConfigService 的NestJS 项目,它扩展了@nestjs/config 并覆盖了它处理环境变量的一些方法,我有一个myApp.config.ts,其中包含许多返回的导出常量配置块,像这样:


export const deviConfig = () => {
  return {
    secret: config.get('SECRET_KEY'),
    auth: config.get('AUTH_OPTION'),
    steps: config.get('STEPS_OPTIONS'),
    active: config.get('ENABLE_DEVI'),
  };
};

config.get 来自我的自定义类,而.get() 来自ConfigService

这里的主要内容是:如果我要在我的main、我的app.module 以及可能在其他一些提供商上使用我的CustomConfigService,我应该使用依赖注入吗?

如果我要使用实际的 ConfigService 方法,我想我应该这样做,因为 NestJS 文档告诉我们这样做,但既然它是一个覆盖实际 ConfigService 的自定义类,我应该吗?

我目前的做法是:

ma​​in.ts: const configService = app.get(CustomConfigService);

configService.get('VAR') // 这是我的自定义方法

app.module.ts: const configService = new(CustomConfigService);

configService.get('VAR') // 也是我的自定义方法

另外...我不确定什么时候应该使用 DI,什么时候可以只使用 new(MyService),请您赐教?

【问题讨论】:

    标签: javascript node.js angular typescript nestjs


    【解决方案1】:

    我认为当您在 NestJS 应用程序上下文中时,您应该始终使用 DI,这意味着在任何模块/服务/控制器或解析器中。

    对于 .module,通常在导入模块时,有一种方法可以注入 ConfigService 以在 forRootAsync 中使用。例如下面从nestjs documentation检索到的代码

    MongooseModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        uri: configService.get<string>('MONGODB_URI'),
      }),
      inject: [ConfigService],
    });
    

    唯一无法进行 DI 的情况是当您在 main.ts 上的 NestJS 上下文之外时,您需要从启动的应用程序中获取 ConfigService(就像您为 main.ts 显示的示例一样)。 ts)

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 1970-01-01
      • 2020-07-23
      • 2018-12-01
      • 2021-01-18
      • 2020-11-24
      • 2022-06-17
      • 1970-01-01
      • 2022-07-14
      相关资源
      最近更新 更多