有没有办法将服务注入类而不必将其声明为构造函数的参数?
通常的方式很好,我没有抱怨。我只是想创建一个超类来处理一些依赖于服务的东西,我希望它是独立的,我不想在子类上引用该服务。
这是通常的方式:
export class MyComponent {
constructor(private someService: SomeNpmInstalledService) {}
doSomething() {
this.someService.do();
}
}
这就是我在寻找的东西:
export class MyComponent {
@Some injection magic annotation here
private someService: SomeNpmInstalledService;
constructor() {}
doSomething() {
this.someService.do();
}
}
我将尝试用以下示例解释我想要这种功能的原因:
export class MyComponent extends MySuperClass {
constructor() {
super();
}
doSomething() {
super.someSuperClassFonctionality();
}
}
export class MySuperClass {
constructor(private someService: SomeNpmInstalledService) {}
someSuperClassFonctionality() {
someService.doStuff();
}
}
上面的代码给出了错误,因为在我的组件中,当我调用 super()时,我必须传递在我的超类的构造函数上定义的参数。但那正是我不想做的。我希望我的组件甚至不知道超类中使用的服务。
答案 0 :(得分:0)
是:使用注射器。 https://angular.io/api/core/Injector
import { Injector } from '@angular/core';
然后在你的构造函数中:
constructor(injector: Injector) {
let this.service = injector.get(ServiceToInject);
}