Dim*_*tri 2 java dependency-injection dagger
一切都在问题中。例如,对于包含 String 列表的 Foo 类:
public class Foo {
private List<String> fooList;
//getter and setter
}
Run Code Online (Sandbox Code Playgroud)
在 XML 中,我们可以执行以下操作:
<bean id="foo" class="Foo">
<property name="fooList">
<list>
<value>bar</value>
<value>baz</value>
</list>
</property>
Run Code Online (Sandbox Code Playgroud)
使用 Dagger,您需要将您的fooList变成Foo类的依赖项。你可以通过用 注释它来做到这一点@Inject。这将告诉 Dagger,当Foo由 Dagger 创建时,也List<String> fooList需要注入。请记住,fooList在我的示例中不是私有的。因为 Dagger 不使用反射而是使用代码生成,所以您必须将可注入字段声明为公共或私有范围。
public class Foo {
@Inject
@Named("FooDependency")
List<String> footList;
// getter and setter
}
Run Code Online (Sandbox Code Playgroud)
在这里,由于 List 是一种常见类型,我们用@Named("FooDependency")其中“FooDependency”可以是您想要的任何字符串对其进行注释。我们这样做是因为您完全有可能希望List<String>在应用程序中的其他位置注入另一个,我们希望能够区分这两个。另一个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");
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用它
ObjectGraph objectGraph = ObjectGraph.create(new SomeModule());
Foo foo = objectGraph.get(Foo.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4453 次 |
| 最近记录: |