我正在尝试通过这个android-architecture示例代码: - https://github.com/googlesamples/android-architecture/tree/todo-mvp-dagger/todoapp
我也读过这个用户指南 - https://google.github.io/dagger/users-guide
这是 TasksRepositoryComponent
中的代码@Singleton
@Component(modules = {TasksRepositoryModule.class, ApplicationModule.class})
public interface TasksRepositoryComponent {
TasksRepository getTasksRepository();
}
扩展Application的ToDoApplication在onCreate() -
中包含此代码mRepositoryComponent = DaggerTasksRepositoryComponent.builder()
.applicationModule(new ApplicationModule((getApplicationContext())))
.build();
我无法理解一些事情: -
为什么TasksRepositoryComponent没有像应用程序中其他组件那样的inject()方法?
为什么ToDoApplication还在build()之前调用DaggerTasksRepositoryComponent中的方法tasksRepositoryModule()?为什么不需要?
在使用dagger2时,有什么地方可以找到遵守规则的良好文档吗?
答案 0 :(得分:0)
为什么
TasksRepositoryComponent
没有inject()
方法 应用程序中的其他组件?
TaskRepositoryComponent
是一个父组件,其唯一目的是将TaskRepository
的绑定发布到其依赖组件。依赖组件将继承TaskRepository
的绑定,并能够将其注入其注入站点。有关此功能的详细信息,请查看documentation for dependent components。
为什么没有
ToDoApplication
也会调用该方法tasksRepositoryModule()
之前的DaggerTasksRepositoryComponent
build()
?为什么不需要?
TasksRepositoryModule
有一个没有参数的默认公共构造函数,因此生成的组件可以初始化它而不在构建器中显式构造它。看看DaggerTasksRepositoryComponent
中生成的代码 - 您会看到类似
if (tasksRepositoryModule == null) {
tasksRepositoryModule = new TasksRepositoryModule();
}