1

何らかの状態を保持し、インターフェースを実装するクラスがあります。このクラスは、構成が異なる GUICE モジュールで複数回登録する必要があります。このクラスには、GUICE によって注入される必要がある他の Bean への依存関係があります。例:

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が意図したものではありません。

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 に答える