我正在使用Guice MapBinder将接口的不同实现绑定到特定键。问题是,我需要在这些绑定中注入一些依赖项。我不认为这是可能的,因为我需要通过这样做来初始化模块:
Guice.createInjector(new SomeModule());
有可能吗?
编辑:更完整的例子:
界面:
public interface SomeInterface {
String getName();
}
实现:
public class SomeImplementation imlements SomeInterface{
@Inject
public SomeImplementation(SomeDependency someDep){
//this needs to be injected
}
@Override
public String getName(){
//getNameFromDependency
}
}
模块:
public class SomeModule extends AbstractModule {
@Override
protected void configure() {
MapBinder<String, SecureToken> binder = MapBinder.newMapBinder(binder(), String.class, SomeInterface.class);
//bind stuff
}
}
EDIT2: 问题是,我使用Reflection来获取接口的所有实现。要调用方法“getName”,我需要调用newInstance。这似乎是问题......: - /
protected void configure() {
MapBinder<String, SomeInterface> binder = MapBinder.newMapBinder(binder(), String.class, SecureToken.class);
try {
Set<Class<? extends SomeInterface>> subTypes = reflections.getSubTypesOf(SecureToken.class);
for (Class<? extends SecureToken> clazz : subTypes) {
SomeInterface someInterface = clazz.newInstance();
String name = someInterface.getName();
binder.addBinding(name).toInstance(someInterface);
}
} catch (IllegalAccessException | InstantiationException e) {
e.printStackTrace();
}
}
答案 0 :(得分:2)
你不再“绑定”,你有(IMO)工厂。所以你应该这样暴露它。 注意:您可以注入喷射器(对于工厂而言)是一件非常好的事情。