网站搜索

typescript - StaticInjectorError/NullInjectorError - 使用 AOT


我有一个服务需要注入到 ngrx effects 模块中。我还需要将这个服务注入到应用程序的根中。我已将该服务添加到应用程序的 providers 列表中。这一切在编译和运行时都没问题,直到我运行 AOT 编译时。

在我的 ItemsEffects 类(我的一个效果类)中,我得到了这个

Error: StaticInjectorError[AppMonitoringService]:
  StaticInjectorError[AppMonitoringService]:
    NullInjectorError: No provider for AppMonitoringService!

这个效果类被导入到我的效果模块中:

@NgModule({
  imports: [
    EffectsModule.forRoot([
      // ...effects classes
    ])
})
export class MyEffectsModule { }

effects 模块被导入到另一个模块中,该模块又被导入到我的根应用模块中:

@NgModule({
  imports: [
    StoreModule.forRoot(/* reducers included here */),
    MyEffectsModule,
  ],
});
export class MyStoreModule{ }

如上所述,上面的模块被导入到我的根模块中:

@NgModule({
  imports: [
    MyStoremodule
  ],
});
export class AppModule { }

当然,相关的类只是尝试注入服务:

@Injectable() 
export class ItemsEffects{
  constructor (private appMonSvc: AppMonitoringService) {
  }
}

...这会导致开头提到的错误:

Error: StaticInjectorError[AppMonitoringService]:
  StaticInjectorError[AppMonitoringService]:
    NullInjectorError: No provider for AppMonitoringService!

我已经尝试将该服务导入到每一个可以想到的位置。我尝试过使用 {provider: AppMonitoringService} 语法,我尝试过从根应用模块中移除该提供者,我甚至尝试自己编写 forRoot 语法来导入它,但这些都不起作用。

最奇怪的事情是,我的几个 effect 正在从整个应用中导入服务。这个 effect 的定义方式完全相同,而且它没有依赖项。我很好奇是否有人知道可能发生了什么,以及我该如何解决这个问题?我 99% 确定我已经阅读了 SO 上关于这个问题的每一个帖子,以及 GitHub 和 Angular 2 的支持文档。现在需要直接向社区求助。

提前谢谢你。

编辑 我使用的是 Angular 5.0.1 和 Typescript 2.4.2