Получение ошибки инжектора при попытке использовать пользовательскую библиотеку Angular Component - PullRequest
0 голосов
/ 05 марта 2019

Я написал собственную библиотеку компонентов Angular, которая использует ComponentFactoryResolver из @angular/core, и когда я пытаюсь импортировать мой модуль в основной модуль приложения, я получаю эту ошибку:

ERROR Error: StaticInjectorError(AppModule)[RouterOutlet -> ComponentFactoryResolver]: 
  StaticInjectorError(Platform: core)[RouterOutlet -> ComponentFactoryResolver]: 
    NullInjectorError: No provider for ComponentFactoryResolver!

Iискал и нашел другие похожие проблемы с библиотекой ngx-bootstrap, делающей аналогичную вещь (я думаю), и даже после просмотра исходного кода для этой библиотеки я все еще не понимаю, что я делаю неправильно.Я предполагаю, что это как-то связано с необходимостью использования статического метода forRoot() в моем модуле, но когда я начал добавлять запись для этого, как это:

export class MyCoreModule {
  static forRoot() : ModuleWithProviders {
    return {
      ngModule: MyCoreModule,
      providers: [{
        provide: ComponentFactoryResolver, useValue: ComponentFactoryResolver
      }]
    }
  }
 }

Это исправило эту ошибку, но потом другуюодин появился за Renderer2.Я исправил одно и другое, и в итоге код выглядел следующим образом:

export class MyCoreModule {
  static forRoot() : ModuleWithProviders {
    return {
      ngModule: MyCoreModule,
      providers: [{
        provide: ComponentFactoryResolver, useValue: ComponentFactoryResolver
      },{
        provide: Renderer2, useValue: Renderer2
      },{
        provide: ViewContainerRef, useValue: ViewContainerRef
      },{
        provide: TemplateRef, useValue: TemplateRef
      },{
        provide: ElementRef, useValue:ElementRef
      }]
    }
  }
 }

И у меня просто было чувство, что я что-то не так делаю.Неправильно, что мне приходилось делать это практически для всех основных сервисов / компонентов Angular, поэтому я остановился.Я также заметил, что библиотеке ngx-bootstrap не нужно было делать ничего подобного в их "ModalModule", который также использует ComponentFactoryResolver.

Следовательно, кто-нибудь знает, что я здесь не так делаю?

...