【发布时间】:2016-10-21 17:15:24
【问题描述】:
假设我有水果类
class Fruit extends FruitBase {
@Inject Fruit(Type type) {...}
}
FruitBase 通过方法注入注入一些东西,所以 Fruit 也必须通过 Guice 注入。
现在我需要在另一个类中注入一个Map<Type, Fruit>。所以我创建了一个MapBinder。最简单的做法是为每种类型创建几个 Fruit 子类:
class Orange extends Fruit {
@Inject Orange() {
super(Type.ORANGE);
}
}
// and later
mapBinder.addBinding(Type.ORANGE).to(Orange.class);
但是,如果我不想创建一堆简单的子类,而是让 MapBinder 将我绑定到的标签(Type.ORANGE,Type.APPLE)注入 Fruit 本身?所以我会:
mapBinder.addBinding(Type.ORANGE).to(Fruit.class);
mapBinder.addBinding(Type.APPLE).to(Fruit.class);
然后我注入的 Map 将有两个 Fruit 实例:一个是 ORANGE 类型,一个是 APPLE。
这可能吗?
我在这里找到了一种解决方法:https://groups.google.com/d/msg/google-guice/m-m9LiVsgSM/pKVi2EIILCsJ
但是factories.get(type).create(type); 有点味道。
【问题讨论】:
标签: java dependency-injection guice