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

Unable to understand component (TasksRepositoryComponent) in android-architecture sample todo-mvp-dagger

我正在尝试完成这个 android 架构示例代码:- 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();
}

扩展应用程序的 ToDoApplication 在 onCreate() 中有这段代码 -

mRepositoryComponent = DaggerTasksRepositoryComponent.builder()
                .applicationModule(new ApplicationModule((getApplicationContext())))
                .build();

有些事情我不明白:-

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

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

有没有什么地方可以找到使用 dagger2 时要遵守的规则的良好文档?

Why doesn't TasksRepositoryComponent have aninject() method like other components in the app?

TaskRepositoryComponent 是父组件,其唯一目的是将 TaskRepository 的绑定发布到其依赖组件。依赖组件将继承 TaskRepository 的绑定,并能够将其注入到它们的注入位置。查看 documentation for dependent components 了解有关此功能的更多信息。

Why doesn't ToDoApplication also call the method tasksRepositoryModule() in DaggerTasksRepositoryComponent before build()? Why isn't that required?

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

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