1

有一个类持有一些状态并实现一个接口。此类应在具有不同配置的 GUICE 模块中多次注册。该类对其他 bean 具有依赖关系,这些 bean 应该由 GUICE 注入。例子:

public class MenuItemImpl implements MenuItem {
  @Inject
  AnyService service;

  public MenuItemImpl(String caption) {
    this.caption = caption;
  }
 //...
}

除了使用 c'tor 参数,还可以使用公共设置器。

在 Guice 模块中,我想绑定 MenuItemImpl 类的多个实例。

我尝试使用 a Provider<T>,但是在这种情况下不注入依赖 bean。

Multibinder<MenuItem> binder = Multibinder.newSetBinder(binder(), MenuItem.class);
binder.addBinding().toProvider( new Provider<MenuItem>() {
  @Override
  public MenuItem get() {
      return new MenuItemImpl("StartCaption");
  }
}

我看了一下@Assist 注释。但是,我想在模块的绑定阶段而不是在使用 bean 时指定配置。

我看到的唯一解决方法是为每种配置创建不同的子类,恕我直言,这不是 OO 的本意。

4

1 回答 1

1
public class A
{
    @Inject
    @Named("startCaption")
    private MenuItem menuItem;

}

public class B
{
    @Inject
    @Named("endCaption")
    private MenuItem menuItem;

}

并在 Guice 模块中

    String[] captions = { "startCaption", "endCaption" };

    for(final String caption : captions)
    {
        bind(MenuItem.class).annotatedWith(Names.named(caption)).toProvider(
        new Provider<MenuItem>()
        {
            public MenuItem get()
            {
                return new MenuItemImpl(caption);
            }

        });
    }
于 2013-06-13T06:34:11.130 回答