2011-12-29 55 views
1

我有三個類(例如)如何注入幾個類到一個方法(guice)?

Buick implements Vehicle 
Chevy implements Vehicle 
Ferrari implements Vehicle 

我有一種方法

travelTo(ZipCode start, Zipcode end) 
for(Class<Vehicle> v : vehicleInstances) 
{ 
    Vehicle car= v.getconstructor(ZipCode.class, ZipCode.class).newInstance(start,end).newInstance(start,end); 

    car.drive(); 
} 

欲注入這些類(而不是使用類名或類的枚舉的醜陋靜態數組名字),通過使用Guice。我將如何做到這一點。

回答

3

看看Guice Multibinder。它可以爲您注入Set<Vehicle>

http://google-guice.googlecode.com/svn/trunk/latest-javadoc/com/google/inject/multibindings/Multibinder.html

編輯:您仍然很有可能要注入,作爲一個成員變量或構造雖然。

編輯:添加示例代碼。這樣做沒有IDE,所以它可能需要一些調整。

public class YourModule extends AbstractModule { 
    protected void configure() { 
     Multibinder<Vehicle> multibinder 
     = Multibinder.newSetBinder(binder(), Vehicle.class); 
     multibinder.addBinding().to(Buick.class); 
     multibinder.addBinding().to(Chevy.class); 
     multibinder.addBinding().to(Ferrari.class); 
    } 
} 

public class YourInterestingClass { 
    private final Set<Vehicle> vehicles; 

    @Inject 
    public YourInterestingClass(Set<Vehicles> vehicles){ 
    this.vehicles = vehicles; 
    } 

    public void doSomethingWithVehicles(){ 
    for(Vehicle vehicle: vehicles){ 
     // do something 
    } 
    } 
} 
+0

這很有幫助 - 對你的multibinder建議實現的解釋對於這裏的上下文很有用......但無論如何,你的答案是有用的。 – jayunit100 2011-12-31 05:20:58

+0

@ jayunit100 - 爲您添加了一些示例代碼。希望澄清。 – rfeak 2011-12-31 18:58:24