我正在尝试做一些花哨的事情:一个DynamicModule,它根据提供程序选择一个Controller / Providers。提供程序在onModuleInit读取数据库中的配置,因此无法对其值进行硬编码。
类似于以下问题:https://github.com/nestjs/nest/issues/601从未得到回答...
我尝试了几种方法,而最接近的方法是:
Song Type
1 1 1
2 2 1
3 3A NA
4 9C NA
5 6 1
6 5 NA
7 12B NA
8 32A 1
9 18 NA
10 27 NA
11 24 NA
12 1D 1
第二种方法:
app.module.ts
export class FancyModule implements DynamicModule {
public module: Type<FancyModule>;
public controllers: Type<unknown>[];
public providers: Provider<unknown>[];
constructor (
@Inject(StartupConfigService) private readonly startup: StartupConfigService,
) {
this.module = FancyModule;
if (startup.featureFlagEnabled) {
this.controllers = [ FancyFeatureController ];
this.providers = [ FancyFeatureService ];
} else {
this.controllers = [ ErrorController ];
this.providers = [];
}
}
}
fancy.module.ts
@Module({
imports: [
StartupConfigModule.register(startupConfigOption),
FancyModule.registerAsync({
imports: [StartupConfigModule],
useFactory: function (startupConfigService: StartupConfigService) {
return startupConfigService.config
},
inject: [StartupConfigService],
}),
],
})
这将按预期进行注入,但是控制器和提供程序永远不会旋转。元数据是在构造函数之前评估的吗?那是个错误吗?
答案 0 :(得分:0)
事实证明,我实际上想做的是不可能的。 FancyModule.registerAsync()
方法的评估在onModuleInit或StartupconfigService(设置功能标志)之前进行。
DynamicModule无法将实例化提供程序的内容用于register()
本身。
其他阅读内容: