Roboguice - 使用参数从构造函数实例化对象

时间:2012-09-11 12:18:07

标签: android android-layout android-intent roboguice

最近我下载了Roboguice并尝试了一下。总的来说我喜欢它,我认为它可以缓解Android开发过程中的某些方面,但是我遇到了一个尚未找到解决方案的情况:我想要注入一个类,但是这个类有一个,更多的构造函数有几个参数。

在这种情况下,我如何指定要为实例化选择哪个构造函数,并将值传递给构造函数?

例如,我有一个带有2个构造函数的类TestRobo,我希望从第二个构造函数中实例化该对象,并将firstNamelastName作为参数传递:

public class TestRobo implements ITestRobo {

    public TestRobo(String fullName) {
        //....
    }

    public TestRobo(String firstName, String lastName) {
        //...
    }
}

现在,如果我像这样注射它:

@Inject
private ITestRobo testRobo;

它有一个例外,它无法找到合适的构造函数。

2 个答案:

答案 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装饰器放到其他方法中,这些方法将在注入过程中调用构造函数后调用。

来源:Official Google Guice Documentation

答案 1 :(得分:1)

您需要将ITestRobo绑定到其TestRobo实现。您可以通过向ITestRobo添加@ProvidedBy(TestRobo.class)注释来执行此操作,也可以在configure()方法中添加模块并绑定(ITestRobo.class).to(TestRobo.class)。

相关问题