2012-09-11 56 views
1

最近我下載了Roboguice並試了一下。總的來說,我喜歡它,我認爲它可以緩解Android開發過程中的某些方面,但是我遇到了一種尚未找到解決方案的情況:我想要注入一個類,但該類有一個,有更多的構造函數參數。Roboguice - 從具有參數的構造函數實例化對象

在這種情況下,我將如何指定要爲實例化選擇哪個構造函數,並將值傳遞給構造函數?

比如我有類TestRobo 2的構造,我要實例從第二個構造對象,傳遞firstNamelastName作爲參數:

public class TestRobo implements ITestRobo { 

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

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

現在,如果我把它注射像這樣:

@Inject 
private ITestRobo testRobo; 

它引發了一個異常,它找不到合適的構造函數。

回答

1

您需要將ITestRobo綁定到其TestRobo實現。您可以通過向ITestRobo添加@ProvidedBy(TestRobo.class)註釋來完成此操作,也可以在configure()方法中添加一個模塊並綁定(ITestRobo.class).to(TestRobo.class)。

3

聲明1:我也是新手。

聲明2:還沒有嘗試過。

據谷歌自己的吉斯文件,指定要使用哪個構造的方法是將@Inject裝飾添加到它

class Test{ 

    //This constructor is ignored 
    Test(){} 

    //This constructor is called during injection 
    @Inject 
    Test(Context pContext){} 


    } 

在這種情況下,噴油器調用第二個構造器,並試圖注入上下文對象稱它。如果找不到,則會拋出異常。

顯然,您也可以將@Inject裝飾器放到其他方法中,在注入過程中調用構造器之後調用它。

來源:Official Google Guice Documentation

相關問題