2012-12-12 42 views
4

我第一次嘗試RoboGuice2 for Android(和Guice),現在我被卡住了。我一直無法找到如何做到這一點的例子,並希望有人向我展示正確的解釋方式。我想@Inject一個對象,該對象在構造函數中將一個字符串作爲參數。下面的例子:注入帶有使用RoboGuice 2參數的構造函數的對象

public class MyActivity extends RoboFragmentActivity { 

    @Inject MyObject obj; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(); 
     obj.print(); 
    } 
} 



public class MyObject { 

    private String name; 

    @Inject 
    public MyObject(String name) { 
     this.name = name; 
    } 


    public void print() { 
     Log.d("debug", this.name); 
    } 
} 

我會超級感謝這個例子和解釋。

+0

你能解釋一下爲什麼你甚至想用RoboGuice管理這個對象嗎?您通常不應該(永遠)需要或想要在注入對象的構造函數中傳遞參數。 –

+0

@JamesMcCracken我正在使用的對象寫入文件系統,可以重複使用不同的文件名。 – jjNford

回答

2

我不確定是否有可能在向其構造函數 傳遞參數的同時向RoboGuice注入對象(並且這肯定不是鼓勵) 。您可能需要考慮只更改寫入該文件系統的那個對象的任何方法以獲取參數String。如果您不喜歡該選項,則可以在調用寫入函數之前使用公共方法來設置該參數。

例:

@Inject 
private MyClass myClass; 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(); 
    myClass.setFileName("somefile.txt"); 
    myClass.writeToFile(); 
} 

或者

@Inject 
private MyClass myClass; 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(); 
    myClass.writeToFile("somefile.txt"); 
} 

編輯:

所以做一些研究,我收回我的發言這個並未受到鼓勵後。從我見過的例子來看,你的代碼看起來大多是正確的。 This Link提供了我能找到的最完整的示例。看起來有兩種選擇,如果你想在構造函數中注入一個字符串。你可以在你的應用程序配置綁定中設置它(實質上創建一個你可能不想要的單例)。第二種選擇是創建一個Provide(類似於Factory)並使用該提供者。這兩個選項都在上面的文章中概述。

+0

好的,你會介意解釋爲什麼這不被鼓勵嗎? – jjNford

+0

我已更新我的帖子,提供更詳細的答案。 –

相關問題