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

时间:2019-03-27 13:36:33

标签: angular angular-providers

我有这样的结构

@Injectable()
export class A extends B ...

@Injectable()
export class C extends B ...

@Component({})
 constructor(
      @Inject(SERVICE) public data // How to inject component
  ) {
  }

我必须将服务A或C动态注入到组件中

2 个答案:

答案 0 :(得分:0)

  

我想注入扩展B

的特定实现

在这种情况下,您只需要指定类型。这可以从参数类型推断出来,也可以在@Inject

中明确定义为参数
constructor(private myService: C) { } 

constructor(@Inject(C) private myService: B) { } 

答案 1 :(得分:-2)

尝试使用这种有角度的 reflectiveInjector https://angular.io/api/core/ReflectiveInjector

这将有助于动态获得服务。

注意::不推荐使用:从 v5 起-速度慢,并且引入了大量代码,请改用Injector.create

  

Injector替代了新的运算符,该运算符可以自动解决构造函数的依赖关系。

     

通常情况下,应用程序代码会在   构造函数,它们由注入器解析。

尝试新的Injector

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

const injector = Injector.create([
  {
    provide: ASerive,
    useClass: ASerive,
    deps: [specify if any dependency]
  }
]);
const gotMySerive = injector.get(ASerive);

根据需要更改创建数据