gpt4 book ai didi

java - guice MapBinder 是否公开绑定(bind) key 以进行注入(inject)?

转载 作者:行者123 更新时间:2023-12-02 03:16:48 29 4
gpt4 key购买 nike

假设我有水果课

class Fruit extends FruitBase {
@Inject Fruit(Type type) {...}
}

FruitBase 通过方法注入(inject)来注入(inject)一些东西,所以 Fruit 也必须通过 Guice 注入(inject)。

现在我需要在另一个类中注入(inject) Map<Type, Fruit> 。所以我创建了一个 MapBinder 。最简单的事情是为每种类型创建几个 Fruit 子类:

class Orange extends Fruit {
@Inject Orange() {
super(Type.ORANGE);
}
}

// and later
mapBinder.addBinding(Type.ORANGE).to(Orange.class);

但是,如果我不想创建一堆简单的子类,而是让 MapBinder 将我绑定(bind)到的标签( Type.ORANGEType.APPLE )注入(inject) Fruit 本身?所以我会:

mapBinder.addBinding(Type.ORANGE).to(Fruit.class);
mapBinder.addBinding(Type.APPLE).to(Fruit.class);

然后我注入(inject)的 Map 将有两个 Fruit 实例:一个为 ORANGE 类型,另一个为 APPLE。

这可能吗?

我在这里找到了一种解决方法:https://groups.google.com/d/msg/google-guice/m-m9LiVsgSM/pKVi2EIILCsJ

但是factories.get(type).create(type);只是有点味道。

最佳答案

您可以使用绑定(bind)到预先创建的实例。请注意,在这种情况下,实例不是由注入(inject)器创建的,而是由这些实例的成员创建的,稍后无论如何都会被注入(inject)。

mapBinder.addBinding(Type.ORANGE).toInstance(new Fruit(Type.ORANGE));
mapBinder.addBinding(Type.APPLE).toInstance(new Fruit(Type.APPLE));

但是相同的实例将在多个注入(inject)的映射之间共享,这可能会导致问题。

关于java - guice MapBinder 是否公开绑定(bind) key 以进行注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40182181/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com