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

如何将字符串转换为类注入器令牌?Angular注入问题咨询

问题解答

你遇到的核心问题是:类本身就是Angular的注入令牌,而你创建的InjectionToken是完全独立的另一个令牌——哪怕它的名字和类名一致,Angular的注入系统也不会自动关联两者,所以会抛出NullInjectorError。

不存在直接把字符串“转换”为类注入令牌的方法,但可以通过以下两种方式实现你想要的效果:

方式一:将自定义令牌与类提供者关联

在模块或组件的providers配置中,把你创建的InjectionToken映射到已有的类提供者:

const token = new InjectionToken<any>('SomeClass');

// 在模块/组件的providers数组中添加映射
@NgModule({
  providers: [
    SomeClass, // 注册类本身的提供者
    { provide: token, useExisting: SomeClass } // 让自定义令牌复用类的实例
  ]
})
export class YourModule {}

之后调用injector.get(token)就能获取到和injector.get(SomeClass)相同的实例。

方式二:维护字符串到类的映射表

如果你需要通过动态字符串获取对应的类令牌,可以提前维护一个映射关系:

// 定义字符串到类的映射
const classTokenMap: Record<string, Type<any>> = {
  'SomeClass': SomeClass,
  // 可以添加更多类的映射
};

// 使用时通过字符串获取类令牌
const targetToken = classTokenMap['SomeClass'];
const instance = injector.get(targetToken);

这种方式需要你提前将所有可能用到的类加入映射表,适合动态注入的场景。

补充说明

Angular的注入系统是基于令牌引用来匹配提供者的:SomeClass类的引用是一个唯一令牌,而new InjectionToken('SomeClass')创建的是另一个全新的令牌对象,两者在注入系统中完全不相关,这就是你报错的根本原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:45:00