想要将单个接口绑定到Eg的多个类。
bind(interface1.class).to(classAbc.class);
bind(interface1.class).to(classDef.class);
bind(interface1.class).to(classGhi.class);
试过这个,但似乎没有起作用:
baseClass obj1;
obj1.add(new classAbc);
obj2.add(new classDef);
bind(interface1.class).toInstance(obj1);
答案 0 :(得分:2)
你看一下Multibinder
吗?
这是直接来自API
public class SnacksModule extends AbstractModule {
protected void configure() {
Multibinder<Snack> multibinder
= Multibinder.newSetBinder(binder(), Snack.class);
multibinder.addBinding().toInstance(new Twix());
multibinder.addBinding().toProvider(SnickersProvider.class);
multibinder.addBinding().to(Skittles.class);
}
}
答案 1 :(得分:1)
如果你想做这样的事情:
baseClass obj1;
obj1.add(new classAbc);
obj2.add(new classDef);
bind(interface1.class).toInstance(obj1);
您可以,但前提是您的baseClass
属于复合模式(其中对象也可以充当其他对象的容器)。否则,您需要在另一个容器中提供替代方案,例如List:
List<Interface1> interfaceList = new ArrayList<>();
interfaceList.add(new classAbc());
interfaceList.add(new classDef());
bind(new TypeLiteral<List<Interface1>>() {}).toInstance(interfaceList);
虽然有上述解决方案:
classAbc
,classDef
等的依赖关系。相反,Multibinding的手动模拟可能看起来像[未经测试]:
public class YourModule extends AbstractModule {
@Override public void configure() {}
@Provides Set<Interface1> createSet(ClassAbc abc, ClassDef def) {
return ImmutableSet.of(abc, def);
}
// Provider<ClassAbc> can't usually be cast to Provider<Interface1>
@SuppressWarnings
@Provides Set<Provider<Interface1>> createProviderSet(
Provider<ClassAbc> abc, Provider<ClassDef> def) {
return ImmutableSet.of(
(Provider<Interface1>) abc,
(Provider<Interface1>) def);
}
}