Я написал собственную библиотеку компонентов 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
.
Следовательно, кто-нибудь знает, что я здесь не так делаю?