最近我下载了Roboguice
并尝试了一下。总的来说我喜欢它,我认为它可以缓解Android开发过程中的某些方面,但是我遇到了一个尚未找到解决方案的情况:我想要注入一个类,但是这个类有一个,更多的构造函数有几个参数。
在这种情况下,我如何指定要为实例化选择哪个构造函数,并将值传递给构造函数?
例如,我有一个带有2个构造函数的类TestRobo
,我希望从第二个构造函数中实例化该对象,并将firstName
,lastName
作为参数传递:
public class TestRobo implements ITestRobo {
public TestRobo(String fullName) {
//....
}
public TestRobo(String firstName, String lastName) {
//...
}
}
现在,如果我像这样注射它:
@Inject
private ITestRobo testRobo;
它有一个例外,它无法找到合适的构造函数。
答案 0 :(得分:3)
免责声明1:我也是新手。
免责声明2:尚未尝试过。
根据谷歌自己的Guice文档,指定使用哪个构造函数的方法是将@Inject装饰器添加到它
class Test{
//This constructor is ignored
Test(){}
//This constructor is called during injection
@Inject
Test(Context pContext){}
}
在这种情况下,注入器调用第二个构造函数并尝试注入Context对象来调用它。如果找不到,则会抛出异常。
显然,您也可以将@Inject装饰器放到其他方法中,这些方法将在注入过程中调用构造函数后调用。
答案 1 :(得分:1)
您需要将ITestRobo绑定到其TestRobo实现。您可以通过向ITestRobo添加@ProvidedBy(TestRobo.class)注释来执行此操作,也可以在configure()方法中添加模块并绑定(ITestRobo.class).to(TestRobo.class)。