gpt4 book ai didi

java - Android Architecture Blueprints "todo‑mvp‑dagger",@Provides for TasksRepository 在哪里?

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:43 25 4
gpt4 key购买 nike

从此处查看 Android 架构蓝图“todo‑mvp‑dagger”:https://github.com/googlesamples/android-architecture .

我试图了解 Dagger2 的实现,但我似乎无法弄清楚他们如何让 Dagger2 提供 TasksRepository。

他们有 @Provides 用于“provideTasksLocalDataSource”和“provideTasksRemoteDataSource”,但实际的 TaskRepository 在哪里?

在 TodoApplication 类中,他们有这个:

@Inject
TasksRepository tasksRepository;

它如何在没有@Provides 的情况下将它注入(inject)到任何地方?

如果我尝试在我自己的应用程序中使用相同的方法,我会收到此错误:

cannot be provided without an @Provides- or @Produces-annotated method

所以我到处查看蓝图代码,但我看不到他们自己是如何做到的。是否有一些技巧可以让他们没有 @Provides?它肯定会构建,所以他们已经以某种方式绕过了它。

有人在实际的 github 页面上问过同样的问题,但在撰写本文时没有答案。 https://github.com/googlesamples/android-architecture/issues/561 .

我正在进行最新的提交,在撰写本文时是“082bd72d62472f9caadd2979046067fb928bbfef”。

最佳答案

在您提到的存储库中,Dagger 2 知道如何注入(inject) TasksRepository通过标有 @Inject 的构造函数.来自source :

@Inject
TasksRepository(@Remote TasksDataSource tasksRemoteDataSource,
@Local TasksDataSource tasksLocalDataSource) {
mTasksRemoteDataSource = tasksRemoteDataSource;
mTasksLocalDataSource = tasksLocalDataSource;
}

由于构造函数被注释为 @Inject , Dagger 2 将尝试使用构造函数注入(inject) TasksRepositoryTodoApplication这样的消费者.

TasksDataSource已经绑定(bind)在TasksRepositoryModule有足够的信息让 Dagger 2 执行注入(inject)而无需额外的负担 @Provides@Binds方法。

同样,您可以执行以下操作:

class Foo {

private final Bar bar;

@Inject
Foo(Bar bar) {
this.bar = bar;
}
}

class Bar {

@Inject
Bar() {}
}

class Activity extends AppCompatActivity {

@Inject Foo foo;

}

而 Dagger 2 将能够注入(inject) Foo里面AppCompatActivity .为什么?

  1. Dagger 2 知道如何构建 Bar对象(通过调用空构造函数)
  2. Dagger 2 在创建 Foo 的实例时知道它必须使用注释为 @Inject 的构造函数使用单个参数 Bar .
  3. Foo 没有其他依赖关系,换句话说,完整的对象图可用。

关于java - Android Architecture Blueprints "todo‑mvp‑dagger",@Provides for TasksRepository 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50869969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com