我编写了一个自定义Angular组件库,该库利用了ComponentFactoryResolver
中的@angular/core
,当我尝试将模块导入到主应用程序模块时,出现此错误:
ERROR Error: StaticInjectorError(AppModule)[RouterOutlet -> ComponentFactoryResolver]:
StaticInjectorError(Platform: core)[RouterOutlet -> ComponentFactoryResolver]:
NullInjectorError: No provider for ComponentFactoryResolver!
我四处搜寻并发现其他similar issues与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
做类似的事情。
因此,有人知道我在做什么错吗?