首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >直接访问NestJS DI容器

直接访问NestJS DI容器
EN

Stack Overflow用户
提问于 2021-06-09 22:58:10
回答 1查看 77关注 0票数 0

我在NestJS上工作了4个月,之前已经工作了5年。特别是在PHP和Symfony中,我可以选择访问已编译的DI容器,并从中获取我需要的任何服务。

例如,如果我们有一个带有服务的应用程序(A B C),而A依赖于BC,那么我就能够在控制器中调用容器,甚至在其他服务中调用容器,这些服务都可以感知容器,并根据需要使用编译的AC服务。

对于NestJS DI,有没有这样的选项--通过某个ID调用某些服务?我试图搜索它,但最终都只能使用编译后的服务,不能直接访问。

UPD:我对从非@Injectible类访问DI容器很感兴趣。例如:

代码语言:javascript
运行
复制
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)
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-06-09 22:59:54

您可以为此使用moduleRef (docs)

代码语言:javascript
运行
复制
@Injectable()
export class CatsService implements OnModuleInit {
  private service: Service;
  constructor(private moduleRef: ModuleRef) {}

  onModuleInit() {
    this.service = this.moduleRef.get(Service);
  }
}

试图在静态(非注入)上下文中访问容器对我来说似乎很可疑,我认为这可能指向您试图构建的功能的设计/架构问题。在这一点上,你肯定是在“对抗”框架。

您需要以非注入方式访问的原因是什么?

您唯一的其他选择是以某种方式使实际的Nest应用程序实例可用于导入到其他文件中,但我强烈建议您不要这样做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67906737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档