将服务注入到依赖于上下文的组件



我有这样的结构

@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);

根据需要更改创建数据

最新更新