2014-09-01 24 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); 
相关问题