Angular 使用全局注入器的角度7组件继承

Angular 使用全局注入器的角度7组件继承,angular,typescript,inheritance,angular7,Angular,Typescript,Inheritance,Angular7,我一直在使用中描述的方法来简化扩展组件,而不需要在super()调用中提供所有依赖项。然而,在Angular 7和Typescript 3中,这已经停止工作 因此,在引导之后,我尝试将注入器存储在服务中,然后尝试检索它 platformBrowserDynamic().bootstrapModule(AppModule).then(ref => { // Store module's injector in the AppInjector class console.log('Ex

我一直在使用中描述的方法来简化扩展组件,而不需要在
super()
调用中提供所有依赖项。然而,在Angular 7和Typescript 3中,这已经停止工作

因此,在引导之后,我尝试将注入器存储在服务中,然后尝试检索它

platformBrowserDynamic().bootstrapModule(AppModule).then(ref => {
  // Store module's injector in the AppInjector class
  console.log('Expected #1: storing app injector');
  AppInjector.setInjector(ref.injector);
})
然后在基本组件中,我获取存储的喷油器

export class BaseComponent {
  constructor() {
    console.log('Expected #2: retrieving stored injector');
    const injector = AppInjector.getInjector();
  }
}
然而,从控制台上看,顺序是相反的–首先调用
BaseComponent
的构造函数,然后解析
boostrapModule()
的承诺

我不确定在Angular 7中引导的行为是否与控制台日志提示的有所不同。与Typescript 2在Angular 6中使用的解决方案完全相同,但在version 7中它已停止工作。下面是一个基于MSDN文章的损坏应用的stackblitz:


因此,基本问题是–如何保证
AppInjector.setInjector()
发生在
AppInjector.getInjector()之前

我已在AppModule中设置了注入器服务,这意味着我将注入注入器并将其设置在AppModule的constractor中,并将注入器服务存储在全局对象中

export class AppModule { 
  constructor(injector:Injector){
  // Store module's injector in the AppInjector class
  console.log('Expected #1: storing app injector');
  AppInjector.setInjector(injector);
  }
}

在bootstraped组件中执行此操作会不会让您感到困扰?似乎工作:使用AppModule构造函数谢谢!这两个建议都有助于避免这个问题:)谢谢,这似乎有效。尽管根据trichetriche的评论,我将喷油器存储在
AppComponent
中,而不是
AppModule
,但我会将您的答案标记为已接受,因为它也能工作。这样做感觉有点不舒服,但只要它有效,对吗?:)两者都是可以接受的,但是如果您使用基类
AppModule
扩展
AppComponent
,将是设置注入器的地方,因为
AppModule
是在
AppComponent
之前创建的。您能将完整的最终示例发送给plunkr吗?@rsb2097此实时示例