加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Android架构蓝图“todo-mvp-dagger”,其中是@Provides f

发布时间:2020-12-15 08:26:24 所属栏目:Java 来源:网络整理
导读:从这里查看 Android架构蓝图“todo-mvp-dagger”: https://github.com/googlesamples/android-architecture. 我正在尝试理解Dagger2实现,我似乎无法弄清楚他们如何让Dagger2提供TasksRepository. 他们有@Provides用于“provideTasksLocalDataSource”和“pr
从这里查看 Android架构蓝图“todo-mvp-dagger”: https://github.com/googlesamples/android-architecture.

我正在尝试理解Dagger2实现,我似乎无法弄清楚他们如何让Dagger2提供TasksRepository.

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

在TodoApplication类中,他们有:

@Inject
TasksRepository tasksRepository;

怎么能在没有@Provides的情况下注入它呢?

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

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

所以我在Blueprints代码中到处寻找,但我看不出他们是如何做到的.是否有一些技巧允许他们没有@Provides?它肯定会建立起来,所以他们以某种方式绕过它.

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

我在撰写本文时的最新提交是“082bd72d62472f9caadd2979046067fb928bbfef”.

解决方法

在您提到的存储库中,Dagger 2知道如何通过使用@Inject标记的构造函数注入TasksRepository.从 source:

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

由于构造函数是使用@Inject注释的,Dagger 2将尝试使用构造函数将TasksRepository注入到消费者(如TodoApplication)中.

由于TasksDataSource已经绑定在TasksRepositoryModule中,因此Dagger 2有足够的信息来执行注入,而不需要额外的@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将能够在AppCompatActivity中注入Foo.为什么?

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读