[英]Create multiple instances of class using guice
有一個類擁有一些狀態並實現了一個接口。 此類應在具有不同配置的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時指定配置。
我看到的唯一解決方法是為每個配置創建不同的子類,這是糟糕的風格,不是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);
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.