具有需要绑定许多实现的接口。由于诸多限制,请进行以下设计(可能效果不佳,请忽略设计)。
是否有可能为当前模块中安装的另一个模块创建注入器,同时仍为当前模块运行configure()方法。
public class CurrentModule extends AbstractModule{
@Override
protected void configure() {
install(new OtherModule());
final someInterface getInstance = methodToGetInstance();
bind(SomeInterface.class).to(getInstance);
}
public SomeInterface methodToGetInstance() {
Injector injector = Guice.createInjector(new OtherModule());
return new ClassImplementingSomeInterface(injector.getInstance(dependency));
}
}
是的,您提供的方法可以实现您的要求。这是您应该如何做:
class CurrentModule extends AbstractModule {
@Override protected void configure() {
install(new OtherModule());
// Optional, but it's good to write it if the dependency becomes missing from OtherModule.
requireBinding(DependencyFromOtherModule.class);
}
@Singleton
@Provides SomeInterface createSomeInterface(DependencyFromOtherModule dependency) {
return new ClassImplementingSomeInterface(dependency);
}
}