我有兩個服務,都是@Injectable。 ServiceA通過Providers陣列提供給組件,並且在任何地方都可以很好地工作。 ServiceB是一個單身人士,位於模塊的Providers數組中,並且在任何地方都可以工作。 ServiceA需要保持不是單身,ServiceB需要保持單身。麻煩注入服務到另一個服務(單例),Angular2
我的問題是,現在我需要從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
我試圖做這樣的構造(進樣(ServiceA)serviceA),但似乎與得到相同的錯誤,
Error: DI Error No provider for ServiceA!
- 我怎麼能「提供」非單服務變成一個單身服務,其中兩個都是@Injectable?
非常感謝@AngularFrance,這是現在的技巧。我注意到你的謹慎和相同的想法,但是一定有辦法解決這個問題,儘管不是嗎?我認爲這可能會導致問題在道路上......理論上你應該能夠注入非單身單身而不會造成任何問題,但是Angular2並不提供一個好方法。 –
不客氣。解決指定限制的另一種方法可能是重構代碼。我想你需要你的服務是一個非單身人士,因爲每個服務實例必須有不同的狀態/數據。也許你可以讓服務成爲一個單身人士,而手動*維護註冊表中的多個國家的服務。大聲思考,不確定這是否適用於你的情況。 – AngularChef
將非單例注入單例是一種代碼異味。你可以使用[Angular2 Injector](https://angular.io/docs/ts/latest/api/core/index/Injector-class。HTML)直接(理想情況下在工廠類中),如果你想創建'ServiceA'到多個其他服務的不同實例。 – Seaal