2012-03-06 53 views
1

我有一個將在應用程序中的多個UI模塊中使用的UI組件。如何讓Guice將帶註釋的注入綁定到單個實例

我想註釋在一個UI模塊中注入到其他幾個類的UI組件是單例,而不是整個應用程序中的單例。爲了使每個UI模塊使用UI組件,使用了一個且僅有一個UI組件實例。

我從Guice文檔找不到這個直接的解決方案。所以我想也許我可以使用註釋區分這些實例? 在模塊A中說,我用Named("ModuleA")註釋了UI組件的所有注入;並在模塊B中使用Named("ModulaB")。而在配置上,我試圖用這樣的:

this.bind(UIComponentA.class) 
    .annotatedWith(Names.named("ModulaA")) 
    .to(UIComponentAImpl.class).in(Singleton.class); 

this.bind(UIComponentA.class) 
    .annotatedWith(Names.named("ModulaB")) 
    .to(UIComponentAImpl.class).in(Singleton.class); 

因爲UICompoenetAImpl還需要注入,所以我不能簡單地創建實例那裏。完全不知道這是否有效。

我想知道完成此操作的標準方法是什麼?

回答

1

另一個選項可能是爲每個模塊使用child injector

這將允許您在每個模塊中綁定UIComponentA的差異實例。將它們綁定在子注入器而不是父級注入器中。然後您需要確保所有模塊的依賴關係都是從正確的子注入器構建的,可能通過確保每個模塊的根從正確的位置加載。

0

因爲UICompoenetAImpl還需要注入,所以我不能簡單地創建實例那裏。

我想你可以在那裏創建UIComponentAmpl並綁定到實例。當你這樣做時 - 其他的bean將被注入到UIComponentAmpl中。請參閱我的示例here

+0

感謝您的答案,但正如我所說的UICompoenentAImpl也有依賴性,需要由Guice注入。 – Wudong 2012-03-06 12:11:15

+0

如果你手動創建UICompoenentAImpl並通過bind(...)。toInstance()把它添加到guice容器中,你是否檢查過這些依賴項沒有被注入?什麼樣的依賴關係? – 2012-03-06 13:13:59

+0

不幸的是它有幾個依賴關係,也需要由Guice注入。手動創建實例將非常麻煩。 – Wudong 2012-03-06 14:07:26

相關問題