当它试图从中的DI容器获取ErrorHandler时,我从ngrx效果中获得了一个NullInjectorError
effect sources
。
NullInjectorError: R3InjectorError(t)[EffectsRootModule -> EffectSources -> ErrorHandler -> ErrorHandler -> ErrorHandler]:
NullInjectorError: No provider for ErrorHandler!
at NullInjector.get (node_modules\@angular\core\bundles\core.umd.js:11624:1)
at R3Injector.get (node_modules\@angular\core\bundles\core.umd.js:11797:1)
at R3Injector.get (node_modules\@angular\core\bundles\core.umd.js:11797:1)
at R3Injector.get (node_modules\@angular\core\bundles\core.umd.js:11797:1)
at injectInjectorOnly (node_modules\@angular\core\bundles\core.umd.js:5078:1)
at Object.ɵɵinject (node_modules\@angular\core\bundles\core.umd.js:5083:1)
at Object.EffectSources_Factory [as factory] (node_modules\@ngrx\effects\bundles\ngrx-effects.umd.js:657:58)
at R3Injector.hydrate (node_modules\@angular\core\bundles\core.umd.js:11972:1)
at R3Injector.get (node_modules\@angular\core\bundles\core.umd.js:11786:1)
at injectInjectorOnly (node_modules\@angular\core\bundles\core.umd.js:5078:1)
我们的项目依赖于一个包,该包将自己的ErrorHandler实现定义为Injectable。
@Injectable()
export class GlobalErrorHandler implements ErrorHandler
这个可注入的模块中有一个静态方法,它说对于ErrorHandler,返回
GlobalErrorHandler
。
export class CommonModule {
static forRoot(): ModuleWithProviders<CommonModule> {
return {
ngModule: CommonModule,
providers: [
{
provide: ErrorHandler,
useClass: GlobalErrorHandler,
},
...
如果我理解正确,此喷油器仅针对
CommonModule
因为
providedIn
价值本质上是
null
。我们的应用程序导入
CommonModule
并调用
.forRoot()
静态方法。
@NgModule({
declarations: [AppComponent],
imports: [
CommonModule.forRoot(),
...
这是否也定义了ErrorHandler到GlobalErrorHandler的映射,因为我正在将其导入应用程序模块?我不知道这是不是真的,因为我仍然有这个错误。