有一个类保存一些状态并实现一个接口。此类应在具有不同配置的GUICE模块中多次注册。该类具有与其他bean的依赖关系,应由GUICE注入。 例如:
public class MenuItemImpl implements MenuItem {
@Inject
AnyService service;
public MenuItemImpl(String caption) {
this.caption = caption;
}
//...
}
也可以使用公共设置器而不是使用c'tor参数。
在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的目的。
答案 0 :(得分: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);
}
});
}