我有两个服务,都是@Injectable。 ServiceA通过Providers阵列提供给组件,并且可以在任何地方使用。 ServiceB是一个单例,位于其模块的Providers数组中,无处不在。 ServiceA需要保持不是单身,而ServiceB需要保持单身。
我的问题是,现在我需要从ServiceB访问ServiceA,但不知道如何访问它。似乎我不能将非单身人士服务注入单身人士。
我遇到的一切都告诉我将服务放在bootstrap或模块声明中,但正如我所提到的,我不能这样做,因为我需要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
我尝试过像构造函数(Inject(ServiceA)serviceA)这样的东西,但似乎得到了同样的错误
错误:DI错误 没有ServiceA的提供者!
答案 0 :(得分:4)
您可以在ServiceA
和@Component.providers
中声明@NgModule.providers
:
ServiceA
时,您将获得组件范围的实例(对应于@Component.providers
声明)。ServiceA
时(在您的情况下:在ServiceA
中注入ServiceB
时),您将获得全局实例(对应于@NgModule.providers
声明)。换句话说,如果您在组件的提供程序(@Component.providers
)中重新声明服务,它将“隐藏”@NgModule.providers
中全局声明的实例。
注意事项:
ServiceA
注入ServiceB
和ServiceC
,那么B和C将获得相同的A实例。