Angular DI中如何通过useFactory向工厂函数传递参数?
向Angular工厂函数传递自定义数值参数的实现方法
要给Angular依赖注入的工厂函数传递自定义数值参数,需要借助InjectionToken来包装原始值——因为DI系统仅支持注入可识别的依赖项。具体步骤如下:
创建InjectionToken标识自定义参数
先定义一个令牌标记要传递的数值,让DI系统能识别它:import { InjectionToken } from '@angular/core'; export const CUSTOM_ID = new InjectionToken<number>('Custom ID');配置providers,添加自定义参数的依赖
在providers配置中,同时提供令牌对应的数值,并将其加入工厂函数的deps数组(注意顺序要和工厂函数参数严格对应):const id = 1; { provide: MyClass, useFactory: myFactory, deps: [CUSTOM_ID, ActivatedRoute], // 参数顺序与工厂函数一致 providers: [ { provide: CUSTOM_ID, useValue: id } ] }编写匹配参数顺序的工厂函数
工厂函数的参数顺序必须和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
相关产品推荐
相关产品推荐

