android todo mvp 生命周期管理,java – Android架构蓝图“todo-mvp-dagger”,其中是@Provides for TasksRepository?...

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

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

在TodoApplication类中,他们有:

@Inject

TasksRepository tasksRepository;

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

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

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

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

我在撰写本文时的最新提交是“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没有其他依赖关系,换句话说,完整的对象图可用.

标签:dagger-android,android,java,dagger-2,kotlin

来源: https://codeday.me/bug/20190731/1587106.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值