我有一个带有构造函数的类,例如:
@Inject
public ClassTest(ITestInterface testInterface, Class<?> clazz){
...
}
问题是如何将类绑定(bind)到可以注入(inject)到此构造函数中的实现,并且 ClassTest
绑定(bind)会选择正确的类吗?
我想在不同的时间点注入(inject)不同的类。当我尝试解决这个问题时,Guice 给出了一个错误,它无法在 java.lang.Class
上找到任何合适的构造函数。
最佳答案
我认为你必须使用 assisted inject Guice 的扩展。
基本上,您按原样定义 ClassTest
,但将“变化的”依赖项标记为 @Assisted
:
@Inject
public ClassTest(ITestInterface testInterface, @Assisted Class<?> clazz){
...
}
然后,您为 ClassTest
对象创建一个工厂接口(interface),它将接受 Class
参数并返回 ClassTest
:
public interface ClassTestFactory {
ClassTest create(Class<?> clazz);
}
然后您安装特殊类型的模块,它将为您创建工厂:
// Inside your module
install(new FactoryModuleBuilder().build(ClassTestFactory.class));
然后,无论您需要 ClassTest
实例,您都应该注入(inject) ClassTestFactory
接口(interface):
@Inject
YourLogicClass(ClassTestFactory ctFactory) {
this.ctFactory = ctFactory;
}
最后,您使用它为您想要的每个类对象创建 ClassTest
:
ClassTest ct1 = ctFactory.create(SomeClass.class);
ClassTest ct2 = ctFactory.create(AnotherClass.class);
但如果我是你,我真的会重新考虑整个类架构以避免此类事情的需要。
关于java - 如何在 Guice 中向 'Class<?> clazz' 注入(inject)一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16435871/