這個問題是,我試圖實現,並嘗試其他方式來解決這個問題,但沒有任何工作,所以這樣的延續遠。實例化每範圍/組單身 - 卡住在Guice依賴地獄
主要問題是這樣的。我有一個InterfaceA
和InterfaceB
,暴露在API的不同部分。有跡象表明,實現這兩個接口,TestClass
和RealClass
,使取決於我是否在測試或做別的事情,我可以做以下兩類:
bind(InterfaceA.class).to(TestClass.class);
bind(InterfaceB.class).to(TestClass.class);
,或者生產:
bind(InterfaceA.class).to(RealClass.class);
bind(InterfaceB.class).to(RealClass.class);
我對使用這些類的兩個要求:
- 我需要的
TestClass
或RealClass
同一實例綁定到所有InterfaceA
和InterfaceB
;所以,像單身模式一樣,除了: - 單身人士只針對特定範圍或子注射器,其中許多是在程序執行期間創建的。
缺省的無範圍方法會導致爲每個接口注入創建多個RealClass
/TestClass
實例。我不想這樣做,所以我試着用範圍,子注入器和其他方法來實現它。沒有奏效:
- Child injector approach:我創建了一個新的注射器,並嘗試將
TestClass
或RealClass
綁定到該噴射器中的單一實例。問題是,TestClass
或RealClass
正在使用在父注入器中配置,而since it's a singleton, it's already instantiated(除非在Stage.DEVELOPMENT
中)。例如,在父注入器中無法綁定InterfaceA
到TestClass
,然後將其重新綁定爲子注入器中的單例。 - 作用域方法:I create a custom scope和註釋
TestClass
和RealClass
。然後,我進入並退出該範圍以獲取該範圍內的單個實例。問題是我的代碼是多線程的,並且從一個線程改變了作用域會影響全局注入器可以看到的東西,並且可以創建其他實例。 組合式兒童注射器和範圍方法。我試圖創建每次使用這個自定義範圍的子注入,但隨後在親代結合
RealClass
失敗No scope is bound to name.package.WhateverScope.
,因爲它似乎堅持認爲
WhateverScope
是所有可用的時間,不只是在孩子注射器。
所有這些問題似乎是由於這樣的事實,我需要能夠配置是否在父用TestClass
或RealClass
,但隨後以後能夠實例化它們,作爲一個單身,對於一組特定的對象。我正在拉我的頭髮,如何完成這項工作!
順便說一句,Guice示波器的文檔很糟糕,幾乎不可能理解。 This article是唯一一個將我帶到任何地方的人: