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