我正在开发一个角度库。它具有内部服务。定义如下。使用providedIn
可摇树。并且不使用providedIn:'root'
,因为其内部且仅在模块作用域中使用过。
@Injectable({
providedIn: MyChartModule,
})
export class LineChartLibService {
并且当我想在模块定义中添加forRoot
以在延迟加载中只有一个实例时,它遇到了循环依赖。
export class MyChartModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: MyChartModule,
providers: [LineChartLibService],
};
}
}
在这种情况下我们应该怎么做?库中是否可以有一个懒惰的可加载树状服务?
WARNING: Circular dependency: dist\my-chart\esm2015\lib\my-chart.module.js -> dist\my-chart\esm2015\lib\line-chart\line-chart.component.js
-> dist\my-chart\esm2015\lib\line-chart-lib.service.js -> dist\my-chart\esm2015\lib\my-chart.module.js
我认为会发生以下情况:
这意味着模块要求提供组件,服务要求,服务要求模块,然后再次要求组件:循环依赖项。
如果您在问题中添加更多代码和上下文,我们也许可以提出更好的建议;-)
我之前已经回答了(非重复)问题,为您提供了这种方法的替代方法。
https://stackoverflow.com/a/60377431/5367916
进行此设置:
my-module.ts
declarations: [
MyComponent
]
my-service.ts
@Injectable({ providedIn: MyModule })
my-component.ts
constructor(private myService: MyService) {}
存在循环依赖关系。
解决方法是创建一个服务模块并将其导入您的模块。
my-module.ts
imports: [
MyModuleServices
],
declarations: [
MyComponent
]
my-module-services.ts
// no imports or declarations
my-service.ts
@Injectable({ providedIn: MyModuleServices })
my-component.ts
constructor(private myService: MyService) {}
更直接的方法是将服务添加到模块的提供程序。
@NgModule({
providers: [ MyService ]
})
export class MyModule {}