1

在我的项目中,我有一个配置文件,其中列出了接口的具体实现。

如何配置我的 Guice 模块,以便在注入接口时从 Type 获取具体类的实例?

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

您可以在启动期间读取配置文件,将其转换为 aMap<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 回答