Angular 6库皮棉和使用Injector.get生成错误

时间:2018-12-20 10:09:09

标签: angular typescript angular6 angular-cli

我有一个Angular库,其他许多项目都在使用它。我目前正在将其更新为Angular 6。

在lib中,有些地方我需要获取可注入的类,但是我不能使用普通的构造函数DI,例如在自定义的装饰器中。为此,我有一个自定义解析器,该解析器使用Injector.get方法来获取对可注入类的引用。解析器如下所示:

import { Injectable, Injector } from '@angular/core';

@Injectable()
export class CoreModuleInjector {
  public static injector: Injector;

  constructor(public injector: Injector) {
    CoreModuleInjector.injector = injector;
  }

  public static get(token: any): any {
    if (CoreModuleInjector.injector) {
      return CoreModuleInjector.injector.get(token);
    }
    return null;
  }
}

然后在其他地方,我像这样使用它:

const state: any = CoreModuleInjector.get(ActivatedRoute);

这在使用lib的应用程序中有效,但是我看到自定义解析器的棉绒警告显示:

  

已弃用:从v4.0.0起使用Type或InjectionToken

而且,我无法进行产品构建,尝试时会看到此错误:

  

收集的元数据包含一个错误,该错误将在运行时报告:由于模板编译器需要此变量的值,因此只能引用初始化的变量和常量。

错误指向自定义解析器中的行return CoreModuleInjector.injector.get(token);。我已经尝试将此行更改为此:

return CoreModuleInjector.injector.get<any>(token as any);

那确实消除了皮棉错误,但不能解决构建错误。

我想解决构建问题,以便我可以以相同的方式继续使用注射器,或者,我需要一种更好的方法来在无法使用常规DI的地方获取可注射类

0 个答案:

没有答案