我有一个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的地方获取可注射类