Giriş
Şu satırı dahil ederiz
Aynı arayüzü gerçekleştiren tüm sınıfları Set olarak alabilmemizi sağlar. List olarak @Inject edemeyiz.import com.google.inject.multibindings.Multibinder;
Benzer yetenek Spring ile de geliyor. Ancak farklı olarak aynı arayüzü gerçekleştiren bean'leri List veya Set olarak alabiliriz.
Örnek
Şöyle yaparız. Böylece Action sınıfından kalıtan her şeyi alabiliriz.
Multibinder<Action> actionBinder = Multibinder.newSetBinder(binder(), Action.class); actionBinder.addBinding().to(FooAction.class); actionBinder.addBinding().to(BarAction.class);Şöyle yaparız
@Inject public Foo(Set<Action> actions) { ... }Örnek
Şöyle yaparız. Böylece elimizde soyut bir Module olur
public abstract class ActionModule extends AbstractModule {
private Multibinder<Action> actionBinder;
@Override
protected void configure() {
actionBinder = Multibinder.newSetBinder(binder(), Action.class);
configureActions();
}
//Override this method to call {@link #bindAction}.
protected abstract void configureActions();
protected final LinkedBindingBuilder<Action> bindAction() {
return actionBinder.addBinding();
}
}
Module gerçekleştirimi için şöyle yaparız.
public final class MyStandardActionModule extends ActionModule {
@Override
protected void configureActions() {
bindAction().to(FooAction.class);
bindAction().to(BarAction.class);
// If you need to instantiate an action through a Provider, do this.
bindAction().toProvider(BazActionProvider.class);
// You can also scope stuff:
bindAction().to(MySingletonAction.class).in(Singleton.class);
}
}