无法理解android-architecture示例todo-mvp-dagger中的组件(TasksRepositoryComponent)

时间:2016-11-17 08:59:02

标签: android mvp dagger-2

我正在尝试通过这个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();

我无法理解一些事情: -

  1. 为什么TasksRepositoryComponent没有像应用程序中其他组件那样的inject()方法?

  2. 为什么ToDoApplication还在build()之前调用DaggerTasksRepositoryComponent中的方法tasksRepositoryModule()?为什么不需要?

  3. 在使用dagger2时,有什么地方可以找到遵守规则的良好文档吗?

1 个答案:

答案 0 :(得分:0)

  

为什么TasksRepositoryComponent没有inject()方法   应用程序中的其他组件?

TaskRepositoryComponent是一个父组件,其唯一目的是将TaskRepository的绑定发布到其依赖组件。依赖组件将继承TaskRepository的绑定,并能够将其注入其注入站点。有关此功能的详细信息,请查看documentation for dependent components

  

为什么没有ToDoApplication也会调用该方法   tasksRepositoryModule()之前的DaggerTasksRepositoryComponent   build()?为什么不需要?

TasksRepositoryModule有一个没有参数的默认公共构造函数,因此生成的组件可以初始化它而不在构建器中显式构造它。看看DaggerTasksRepositoryComponent中生成的代码 - 您会看到类似

的内容
if (tasksRepositoryModule == null) { 
    tasksRepositoryModule = new TasksRepositoryModule(); 
}