Nestjs 动态模块依赖注入
我正在尝试做一些奇特的事情:一个DynamicModule,它根据提供程序选择一个控制器/提供程序。提供程序在onModuleInit读取数据库中的配置,因此无法硬编码其值 这类似于这个问题:它从未得到回答 我尝试过几种方法,最接近的方法是:Nestjs 动态模块依赖注入,nestjs,Nestjs,我正在尝试做一些奇特的事情:一个DynamicModule,它根据提供程序选择一个控制器/提供程序。提供程序在onModuleInit读取数据库中的配置,因此无法硬编码其值 这类似于这个问题:它从未得到回答 我尝试过几种方法,最接近的方法是: 导出类FancyModule实现DynamicModule{ 公共模块:类型; 公共控制器:类型[]; 公共提供者:提供者[]; 建造师( @注入(StartupConfigService)专用只读启动:StartupConfigService, ) {
导出类FancyModule实现DynamicModule{
公共模块:类型;
公共控制器:类型[];
公共提供者:提供者[];
建造师(
@注入(StartupConfigService)专用只读启动:StartupConfigService,
) {
this.module=FancyModule;
如果(启动。功能可激活){
this.controllers=[FancyFeatureController];
this.providers=[FancyFeatureService];
}否则{
this.controllers=[ErrorController];
此参数为[];
}
}
}
第二种方法:
app.module.ts
@模块({
进口:[
StartupConfigModule.寄存器(startupConfigOption),
FancyModule.registerAsync({
导入:[StartupConfigModule],
useFactory:函数(startupConfigService:startupConfigService){
返回startupConfigService.config
},
inject:[StartupConfigService],
}),
],
})
fancy.module.ts
导出类FancyModule{
静态注册表同步(配置:IAppConfig):动态模块{
如果(config.featureflagnabled){
返回{
模块:FancyModule,
控制器:[FancyFeatureController],
提供者:[FancyFeatureService],
};
}否则{
返回{
模块:FancyModule,
控制器:[],
提供者:[],
};
}
}
}
这将按预期注入,但控制器和提供程序从未启动。元数据是在构造函数之前评估的吗?这是一个bug吗?事实证明,我想做的是不可能的。
FancyModule.registerAsync()
方法的计算发生在启动配置服务(设置功能标志)的onModuleInit之前。
DynamicModule不能将实例化提供程序的内容用于register()
本身
其他案文: