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