如何使用
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();
这里可以做的是你可以让
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
这里有一个工作示例