代码之家  ›  专栏  ›  技术社区  ›  Jimenemex

如何为第三方依赖项配置Injector-来自ngrx效果的NullInjectorError

  •  0
  • Jimenemex  · 技术社区  · 2 年前

    当它试图从中的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的映射,因为我正在将其导入应用程序模块?我不知道这是不是真的,因为我仍然有这个错误。

    0 回复  |  直到 2 年前