Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nestjs 动态模块依赖注入_Nestjs - Fatal编程技术网

Nestjs 动态模块依赖注入

Nestjs 动态模块依赖注入,nestjs,Nestjs,我正在尝试做一些奇特的事情:一个DynamicModule,它根据提供程序选择一个控制器/提供程序。提供程序在onModuleInit读取数据库中的配置,因此无法硬编码其值 这类似于这个问题:它从未得到回答 我尝试过几种方法,最接近的方法是: 导出类FancyModule实现DynamicModule{ 公共模块:类型; 公共控制器:类型[]; 公共提供者:提供者[]; 建造师( @注入(StartupConfigService)专用只读启动:StartupConfigService, ) {

我正在尝试做一些奇特的事情:一个DynamicModule,它根据提供程序选择一个控制器/提供程序。提供程序在onModuleInit读取数据库中的配置,因此无法硬编码其值

这类似于这个问题:它从未得到回答

我尝试过几种方法,最接近的方法是:

导出类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()
本身

其他案文: