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

Angular DI中如何通过useFactory向工厂函数传递参数?

向Angular工厂函数传递自定义数值参数的实现方法

要给Angular依赖注入的工厂函数传递自定义数值参数,需要借助InjectionToken来包装原始值——因为DI系统仅支持注入可识别的依赖项。具体步骤如下:

  1. 创建InjectionToken标识自定义参数
    先定义一个令牌标记要传递的数值,让DI系统能识别它:

    import { InjectionToken } from '@angular/core';
    
    export const CUSTOM_ID = new InjectionToken<number>('Custom ID');
    
  2. 配置providers,添加自定义参数的依赖
    在providers配置中,同时提供令牌对应的数值,并将其加入工厂函数的deps数组(注意顺序要和工厂函数参数严格对应):

    const id = 1;
    
    { 
      provide: MyClass, 
      useFactory: myFactory, 
      deps: [CUSTOM_ID, ActivatedRoute], // 参数顺序与工厂函数一致
      providers: [
        { provide: CUSTOM_ID, useValue: id }
      ]
    }
    
  3. 编写匹配参数顺序的工厂函数
    工厂函数的参数顺序必须和deps数组完全对应,这样就能正确获取自定义id和ActivatedRoute:

    function myFactory(id: number, activatedRoute: ActivatedRoute) {
      // 在此使用id和activatedRoute完成实例创建逻辑
      return new MyClass(id, activatedRoute);
    }
    

补充说明

如果id是固定不变的全局值,也可以直接在工厂函数里引用外部的id变量,但这种方式灵活性不足。当需要在不同模块传入不同值,或者id需要从其他依赖动态获取时,使用InjectionToken的方式更符合Angular的DI设计规范。

内容的提问来源于stack exchange,提问作者akr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:39:52