2014-09-01 26 views
0

一切都在問題中。例如,對於包含字符串列表的Foo類:如何在Dagger中注入一個列表或一個集合,因爲我們可以在Spring中完成它?

public class Foo { 

private List<String> fooList; 

//getter and setter 

} 

在XML中,我們可以做到以下幾點:

<bean id="foo" class="Foo"> 
    <property name="fooList"> 
    <list> 
     <value>bar</value> 
     <value>baz</value>   
    </list> 
</property> 

+0

看起來像你必須爲此創建供應商,一看便知到類似的問題http://stackoverflow.com/a/18105271/2807168 – leveluptor 2014-09-01 17:07:26

回答

1

使用匕首,你需要把你的fooList成您的Foo類的依賴關係。你可以用@Inject註釋來做到這一點。這將告訴Dagger,當Dagger創建Foo時,還需要注入List<String> fooList。請記住,fooList在我的示例中不是私有的。由於Dagger不使用反射並使用代碼生成,所以您必須將可注射域聲明爲公共或私有範圍。

public class Foo { 

    @Inject 
    @Named("FooDependency") 
    List<String> footList; 

    // getter and setter 

} 

在這裏,因爲名單是一種常見的類型,我們用@Named("FooDependency")標註它在那裏「FooDependency」可以是任何你想要的字符串。我們這樣做是因爲在所有可能的情況下,您都希望在應用程序中注入另一個List<String>,並且我們希望能夠區分2.其他List<String>例如可以用@Named("ADifferentDependency")進行註釋。

然後,您需要在您的模塊之一中註釋一個使用@Provide的方法,該模塊將負責提供該依賴關係。

@Module(injects = Foo.class) 
public class SomeModule { 
    @Provide 
    @Named("FooDependency") 
    public List<String> provideFooDependencyListOfString() { 
     return Arrays.asList("1", "2", "3"); 
    } 
} 

然後你可以使用它

ObjectGraph objectGraph = ObjectGraph.create(new SomeModule()); 
Foo foo = objectGraph.get(Foo.class); 
相關問題