Angular 角度提供程序:使用现有的或创建一个(如果未提供)

Angular 角度提供程序:使用现有的或创建一个(如果未提供),angular,dependency-injection,Angular,Dependency Injection,在Angular 2+中,只有在不存在实例的情况下,如何才能提供可注入的的新实例 我搜索并没有找到,所以我尝试了useFactory。这是我目前的代码: { 提供:色彩服务, useFactory:(colorService:ColorsService,colors:string[])=>{ 如果(colorService)返回colorService; 返回新颜色服务(颜色); }, 副秘书:[颜色服务,我的颜色], }, 除了手动注入MY_COLORS标记之外,我还遇到了一个奇怪的错误:

在Angular 2+中,只有在不存在实例的情况下,如何才能提供可注入的
的新实例

我搜索并没有找到,所以我尝试了
useFactory
。这是我目前的代码:

{
提供:色彩服务,
useFactory:(colorService:ColorsService,colors:string[])=>{
如果(colorService)返回colorService;
返回新颜色服务(颜色);
},
副秘书:[颜色服务,我的颜色],
},
除了手动注入
MY_COLORS
标记之外,我还遇到了一个奇怪的错误:

错误:PghChartColorsService的循环dep


因此,在@eko的帮助下,我找到了这个解决方案:

@组件({
...
提供者:[颜色服务],
})
导出类子组件{
colorService:ColorsService;
建造师(
@Self()currentColorService:ColorsService,
@可选()@SkipSelf()parentColorService?:ColorsService,
) {
this.colorService=parentColorService??currentColorService;
}
}

在本例中,
parentColorService
是可能由父组件提供的服务。如果没有提供,我将使用在这个组件中实例化的
currentColorSerivce
(它被实例化了,这可能不是一件好事)。

为什么不在“根”
中声明它为
providedIn:“根”
?因为它不是根服务。我需要不同组件中此服务的不同实例。但我需要的是,当我在父组件中提供服务时,所有子组件都将使用提供的实例,然后在该父组件中提供服务?好的,那就试试
@SkipSelf
是的,我觉得不错!你应该接受这个答案作为解决方案