我在NestJS上工作了4个月,之前已经工作了5年。特别是在PHP和Symfony中,我可以选择访问已编译的DI容器,并从中获取我需要的任何服务。
例如,如果我们有一个带有服务的应用程序(A B C
),而A
依赖于B
和C
,那么我就能够在控制器中调用容器,甚至在其他服务中调用容器,这些服务都可以感知容器,并根据需要使用编译的A
或C
服务。
对于NestJS DI,有没有这样的选项--通过某个ID调用某些服务?我试图搜索它,但最终都只能使用编译后的服务,不能直接访问。
UPD:我对从非@Injectible类访问DI容器很感兴趣。例如:
export class StatefulCruncherClass{
constructor(private dataToCrunch:any){
}
async crunch(){
if (this.dataToCrunch.isObject){
return NestJs.getDI().get('ObjectsCruncher').crunch(this)
} else {
return NestJs.getDI().get('ArrayCruncher').crunch(this)
}
}
}
发布于 2021-06-09 22:59:54
您可以为此使用moduleRef
(docs)
@Injectable()
export class CatsService implements OnModuleInit {
private service: Service;
constructor(private moduleRef: ModuleRef) {}
onModuleInit() {
this.service = this.moduleRef.get(Service);
}
}
试图在静态(非注入)上下文中访问容器对我来说似乎很可疑,我认为这可能指向您试图构建的功能的设计/架构问题。在这一点上,你肯定是在“对抗”框架。
您需要以非注入方式访问的原因是什么?
您唯一的其他选择是以某种方式使实际的Nest应用程序实例可用于导入到其他文件中,但我强烈建议您不要这样做。
https://stackoverflow.com/questions/67906737
复制相似问题