You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中inject函数结合APP_INITIALIZER使用报错原因咨询

Angular中APP_INITIALIZER使用inject函数报错的原因及解决方法

你遇到的NG0203错误,核心问题是**inject函数的调用时机不对**:

  • 你写的代码里,useFactory返回了一个嵌套的箭头函数,inject(Engine)是在这个嵌套函数里调用的,而不是在工厂函数本身的执行阶段。
  • Angular的inject函数必须在注入上下文活跃时调用——也就是工厂函数执行的那个时刻。而APP_INITIALIZER返回的嵌套函数,是在应用初始化阶段才会被执行,这时候原来的注入上下文已经不存在了,自然会触发错误。

正确的写法

要解决这个问题,只需把inject的调用移到工厂函数内部,提前获取依赖实例,再让返回的初始化函数直接使用这个实例:

providers: [
  {
    provide: APP_INITIALIZER,
    useFactory: () => {
      // 工厂函数执行阶段处于注入上下文,可安全调用inject
      const engine = inject(Engine);
      // 返回的初始化函数直接使用提前拿到的实例
      return () => engine.start();
    },
    multi: true
  }
]

为什么Car的工厂函数没问题?

之前的Car提供者示例能正常工作,是因为inject是在工厂函数的执行过程中直接调用的,整个逻辑都处于Angular的注入上下文里,完成依赖获取后直接返回Car实例,没有延迟到后续脱离上下文的时机执行。

内容的提问来源于stack exchange,提问作者Mikkel R. Lund

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:42:36