使用匕首,你需要把你的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);
看起来像你必须为此创建供应商,一看便知到类似的问题http://stackoverflow.com/a/18105271/2807168 – leveluptor 2014-09-01 17:07:26