2013-02-08 44 views
0

我有一個通用的接口,像這樣:如何在Guice中綁定池(沒有太多樣板)?

trait Thing { 
    ... 
} 

和實現像這樣:

class ThingA extends Thing { 
    ... 
} 

class ThingB extends Thing { 
    ... 
} 

使用哪一個在運行時確定的,所以池配置爲提供正確的:

​​3210

如何將所有已配置的Thing s提供給ThingPool,而無需將其顯式添加到構造函數中?

如,我想做到以下幾點:

class Things(pool: ThingPool) { 
    addThingsFromPool(pool) 

    def getThing(x: String) = { ... } 
} 

...其中ThingPool擁有所有Thing•不用明確地要求他們。可以是List[Thing]

物件的當前狀態需要兩個額外編輯添加一個Thing。我想說明一下,我需要做的是在Guice模塊中添加綁定語句。

爲了清楚起見,我省略了註釋。

+1

我想這是在與你的願望的賠率,但你看着使用Cake Pattern,而不是像Guice這樣的額外語言的DI工具? – 2013-02-08 17:16:08

回答

1

看來你正在尋找Multibinding擴展:http://code.google.com/p/google-guice/wiki/Multibindings

val thingBinder = Multibinder.newSetBinder(binder(), classOf[Thing]) 
thingBinder.addBinding().to(classOf[ThingA]) 
thingBinder.addBinding().to(classOf[ThingA]) 

然後用它

class Things(pool:Set[Thing]) 
+0

還沒有嘗試過,但LGTM。謝謝! – Scoobie 2013-02-12 19:43:42