【问题标题】:Unable to understand component (TasksRepositoryComponent) in android-architecture sample todo-mvp-dagger无法理解 android-architecture 示例 todo-mvp-dagger 中的组件 (TasksRepositoryComponent)
【发布时间】:2016-11-17 08:59:02
【问题描述】:

我正在尝试通过这个 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()?为什么不需要呢?

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

【问题讨论】:

标签: android mvp dagger-2


【解决方案1】:

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

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

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

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

if (tasksRepositoryModule == null) { 
    tasksRepositoryModule = new TasksRepositoryModule(); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多