代码之家  ›  专栏  ›  技术社区  ›  rubmz

带字符串标记的角度动态DI

  •  2
  • rubmz  · 技术社区  · 6 年前

    似乎角度6(4+?)需要标记 物体 按姓名 .

    this.service = this.injector.get(new InjectionToken<IServiceRef>(tokenName));
    

    失败原因:

    Error: StaticInjectorError(AppModule)[InjectionToken the_token_name]: 
    

    当我用旧的debricated(在angular4中)Injector.get函数替换我的代码时,它工作正常,因为Injector比较名称(并且我在视图中使用该名称提供服务…)。然而,有了新的DI,我无法实现我想要的。

    那么,如何应对呢?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Reactgular    6 年前

    您必须为您的令牌使用全局存储对象。我建议你用地图。

    export const tokens: Map<string, InjectionToken<IServiceRef>> = new Map();
    tokens.set('tokenName', new InjectionToken<IServiceRef>('tokenName'));
    

    必须使用map对象来声明提供程序。

    @NgModule({
         providers: [
              {provide: tokens.get('tokenName'), useValue: new Service()}
         ]
     );
    

    this.service = this.injector.get(tokens.get(the_token_name));
    

    我不知道Angular 6中的情况发生了变化,但我记得文档中说令牌是通过值引用的。这意味着DI使用 === 匹配依赖项。

    推荐文章