为动态 NestJS 模块提供提供程序

问题描述 投票:0回答:1

如何使用

export const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<ConfigModuleOptions>().setFactoryMethodName('createConfigOptions').build();
为动态模块提供多个提供程序?

我读了这篇文章为动态 NestJS 模块提供提供程序。它只是使用三十方库。我相信自从两年前发布以来,

ConfigurableModuleBuilder
可以实现相同的用例。

那么如何将传递给

registerAsync
的选项分成多个提供者?

    AuthModule.registerAsync({
      imports: [UserModule],
      inject: [UserService, ConfigService],
      useFactory: (userService: UserService, configService: ConfigService) => ({
        userService: userService,
        configService
      }),
    }),

那么,对于上面的代码片段,我该如何执行下面的操作?

    @Inject(USER_SERVICE) private userService: IUserService,
    @Inject(CONFIG_SERVICE) private configService: IConfigService,

模块定义文件

export const {
  ConfigurableModuleClass,
  MODULE_OPTIONS_TOKEN,
  OPTIONS_TYPE,
  ASYNC_OPTIONS_TYPE,
} = new ConfigurableModuleBuilder<AuthModuleOptions>().build();

node.js typescript nestjs nest
1个回答
0
投票

这里可以做的是你可以让

AuthModule
有一个
@Module()
装饰器,如下所示:

@Module({
  providers: [
    {
      provide: USER_SERVICE,
      inject: [MODULE_OPTIONS_TOKEN],
      useFactory: (options: AuthModuleOptions) => options.userService
    },
    {
      provide: CONFIG_SERVICE,
      inject: [MODULE_OPTIONS_TOKEN],
      useFactory: (options: AuthModuleOptions) => options.configService,
    }
  ],
})
export class AuthModules extends ConfigurableModuleClass {}

请注意,这样做将允许 AuthModule 中的其他服务通过

@Inject(USER_SERVICE)
注入 userService,但这也意味着
AuthModule
not
在不使用 forRoot/
forRootAsync
方法的情况下可用.

我的

OgmaModule这里有一个工作示例


    

© www.soinside.com 2019 - 2024. All rights reserved.