使用guice创建类的多个实例

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

public class MenuItemImpl implements MenuItem {
  @Inject
  AnyService service;

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

而不是使用c'tor参数,公共setter也是可能的。

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

我试图使用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时指定配置。

我看到的唯一解决方法是为每个配置创建不同的子类,这是不好的样式imho,而不是OO意图是什么。


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);
            }

        });
    }
链接地址: http://www.djcxy.com/p/94647.html

上一篇: Create multiple instances of class using guice

下一篇: Running inside Guice injector, @Injects not respected on `new`