1

私のプロジェクトには、インターフェースの具体的な実装をリストした構成ファイルがあります。

インターフェイスが挿入されるたびにTypeから具象クラスのインスタンスを取得できるようにGuiceモジュールを構成するにはどうすればよいですか?

interface A{}

class AImpl implements A{ @Inject public A(.....)}

class B {
  @Inject
  public B(A a) {}
}


class MyModule extends AbstractModule {
  ...
  @Provides
  public A getA(@ConfiguredClass String classname) {
     Class<A> aClass = (Class<A>) Class.forName(classname);
     // ???
     // this needs to be instantiated by Guice to fulfill AImpl's dependencies
     return aClass.newInstance();
  }
}

config:
class: my.package.AImpl
4

1 に答える 1

2

起動時に構成ファイルを読み取り、それをに変換してMap<Class, Class>マッピングをモジュールにフィードし、次のようにすべてのバインディングを構成できます。

public class MyModule extends AbstractMdoule{

    //interface -> concrete
    Map<Class, Class> implementsMap;
    ...
    public void configure() {
        for (Map.Entry<Class, Class> implEntry : implementsMap.entrySet()) {
            bind(implEntry.getKey()).to(implEntry.getValue());
        }
    }
}
于 2012-05-09T23:56:02.603 に答える