Jos*_*ana 5 dependency-injection typescript angular
我有两个服务,都是@Injectable。ServiceA 通过 Providers 数组提供给组件,并且在任何地方都能很好地工作。ServiceB 是一个单例,位于其模块的 Providers 数组中,在任何地方都能很好地工作。ServiceA 需要保持不是单例,ServiceB 需要保持单例。
我的问题是现在我需要从 ServiceB 访问 ServiceA,但不知道如何访问它。似乎我无法将非单例服务注入单例。
我遇到的一切都告诉我将服务放在引导程序或模块声明中,但正如我所提到的,我不能这样做,因为我需要 ServiceA 作为非单例行为。
// module setup
... providers: [ServiceB]
// non-singleton
@Injectable()
export class ServiceA
// singleton
@Injectable()
export class ServiceB {
constructor(ServiceA) // <-- this is the problem area, need to get ServiceA here
Run Code Online (Sandbox Code Playgroud)
我曾尝试做类似构造函数(Inject(ServiceA) serviceA) 的事情,但似乎遇到了同样的错误
错误:DI 错误 ServiceA 没有提供程序!
您可以同时声明ServiceAin@Component.providers和@NgModule.providers:
ServiceA组件的构造函数时,您将获得组件范围的实例(对应于@Component.providers声明)。ServiceA另一个服务的构造函数时(在您的情况下:注入ServiceA时ServiceB),您将获得全局实例(对应于@NgModule.providers声明)。换句话说,如果您在组件的提供者 ( @Component.providers) 中重新声明服务,它将“隐藏”在@NgModule.providers.
注意事项:
ServiceA成ServiceB和ServiceC,然后B和C会得到A的同一实例| 归档时间: |
|
| 查看次数: |
6598 次 |
| 最近记录: |