Angular 9使用提供程序扩展ServiceProviderComponent

Angular 9使用提供程序扩展ServiceProviderComponent,angular,typescript,dependency-injection,angular9,Angular,Typescript,Dependency Injection,Angular9,我有一个ServiceProviderComponent,它唯一的工作就是提供服务。 我想通过另一个组件(HelloComponent)扩展此ServiceProviderComponent,以便可以在其中使用服务及其子组件。 如果不调用super(),如何实现这一点;在HelloComponent构造函数中使用该服务作为参数? 我尝试注入注入器,并使用Injector.create()提供服务,但它不起作用 我已经创建了一个演示。 在hello.component中,我想使用在ServiceP

我有一个ServiceProviderComponent,它唯一的工作就是提供服务。 我想通过另一个组件(HelloComponent)扩展此ServiceProviderComponent,以便可以在其中使用服务及其子组件。 如果不调用super(),如何实现这一点;在HelloComponent构造函数中使用该服务作为参数? 我尝试注入注入器,并使用Injector.create()提供服务,但它不起作用

我已经创建了一个演示。 在hello.component中,我想使用在ServiceProviderComponent中提供的基本测试令牌注入令牌的实例,但始终使用全局instance

我甚至可以扩展像ServiceProvider这样的组件吗

更新1 我已经用指令更新了我的。我希望此指令也使用hello.component的服务实例。
如何才能做到这一点?

虽然理解您想要什么有点困难,但我相信通过使用
注入器
并使用
注入器在构造函数中创建一个新注入器是可能的。create
方法

尽管
.create
方法只允许所谓的
静态提供者
,但您可以通过使用带有“useFactory:

--

不幸的是,对于您的更新,您必须从指令中扩展服务组件并注入注入器,并在超级调用中传递:


另一方面,这感觉就像是在反模式下工作,什么是角度谓词。你正在试图解决一些问题,这些问题要么用另一种方式解决,要么根本不解决。从你的问题中我看不出你的最终目标是什么

我知道这并不能回答你的问题,但是为什么您要创建服务提供商组件而不是直接注入所需的服务?@marcel我想在不同的组件中有多个服务实例,但我不想在每个组件中都有“提供”行谢谢您的回答。你的例子几乎就是我需要的。我还有一个问题,我已经用你的例子的更新版本更新了我的帖子。你能告诉我如何做到这一点吗?谢谢你的更新。我的最终目标是,我有多个具有异步初始化的组件,它们都需要自己的http请求来接收数据。但它们可以相互依赖,所以我试图提供一个服务,在这个服务中,我可以控制我自己的生命周期,即所有组件的数据源初始化。这些组件是通过指令动态创建的,这些组件的组合可以多次出现。因此,我希望这个星座的每个实例都有一个自己的服务实例
@Component({
  selector: 'hello',
  template: `<h1>Hello {{name}}!</h1>`,
  styles: [`h1 { font-family: Lato; }`]
})
export class HelloComponent extends ServiceProviderComponent implements OnInit {
  @Input() name: string;

  ngOnInit() {
    this.name = this.testService.test();
  }
}
@Directive()
export class ServiceProviderComponent {
  protected testService: BaseTestService;

  constructor(injector: Injector) {
    injector = Injector.create(
      [{ provide: BASE_TEST_TOKEN, useFactory: (...deps) => new TestServiceService(), deps: [] }],
      injector
    );

    this.testService = injector.get(BASE_TEST_TOKEN);
  }
}