我有这样的结构
@Injectable()
export class A extends B ...
@Injectable()
export class C extends B ...
@Component({})
constructor(
@Inject(SERVICE) public data // How to inject component
) {
}
我必须动态地将服务 A 或 C 注入到组件
我想注入一个扩展
B
的特定实现
在这种情况下,您只需指定类型。这可以从参数类型推断出来,也可以显式定义为@Inject
中的参数
constructor(private myService: C) { }
或
constructor(@Inject(C) private myService: B) { }
试试这个角度反射喷油器 https://angular.io/api/core/ReflectiveInjector
这将有助于动态获取服务。
注意:已弃用:从 v5 开始 - 速度慢并引入大量代码,请改用Injector.create
。
注入器是新运算符的替代品,它可以自动解析构造函数依赖项。
在典型使用中,应用程序代码要求在 构造函数,它们由注入器解析。
尝试新Injector
:
import { Injector } from '@angular/core';
const injector = Injector.create([
{
provide: ASerive,
useClass: ASerive,
deps: [specify if any dependency]
}
]);
const gotMySerive = injector.get(ASerive);
根据需要更改创建数据