Java Android架构蓝图”;todo‑;mvp&x2011;匕首;,@Provides for TasksRepository在哪里?
从这里查看Android架构蓝图“todo‑mvp‑dagger”: 我试图理解Dagger2的实现,但我似乎不明白他们是如何让Dagger2提供TasksRepository的 他们为“ProvideTaskSksLocalDataSource”和“ProvideTaskSksRemoteDataSource”提供了Java Android架构蓝图”;todo‑;mvp&x2011;匕首;,@Provides for TasksRepository在哪里?,java,android,kotlin,dagger-2,dagger,Java,Android,Kotlin,Dagger 2,Dagger,从这里查看Android架构蓝图“todo‑mvp‑dagger”: 我试图理解Dagger2的实现,但我似乎不明白他们是如何让Dagger2提供TasksRepository的 他们为“ProvideTaskSksLocalDataSource”和“ProvideTaskSksRemoteDataSource”提供了,但实际的TaskRepository在哪里 在TodoApplication类中,它们具有以下特性: @Inject TasksRepository tasksRepositor
,但实际的TaskRepository在哪里
在TodoApplication类中,它们具有以下特性:
@Inject
TasksRepository tasksRepository;
在没有@Provides的情况下,它怎么能注入这个呢
如果我尝试在自己的应用程序中使用相同的方法,我会遇到以下错误:
如果没有@Provides-或@products注释方法,则无法提供
所以我到处找蓝图代码,但我看不出他们自己是怎么做到的。有没有什么诀窍可以让他们不使用@提供的?它确实可以建造,所以他们可以绕过它
有人在实际的github页面上提出了相同的问题,但在撰写本文时没有答案
我正在进行最新的提交,在撰写本文时是“082BD72D62472F9CAAD2979046067FB928BFEF”。在您提到的存储库中,Dagger 2知道如何通过标记为@inject
的构造函数注入任务还原。从:
由于构造函数是用@Inject
注释的,Dagger 2将尝试使用构造函数将TasksRepository
注入消费者,如TodoApplication
由于TasksDataSource
已绑定在TasksRepositoryModule
中,因此有足够的信息供Dagger 2执行注入,而无需额外的@提供或@绑定方法
类似地,您可以执行以下操作:
class Foo {
private final Bar bar;
@Inject
Foo(Bar bar) {
this.bar = bar;
}
}
class Bar {
@Inject
Bar() {}
}
class Activity extends AppCompatActivity {
@Inject Foo foo;
}
匕首2将能够在AppCompatActivity
内部注入Foo
。为什么?
Dagger 2知道如何构造Bar
对象(通过调用空构造函数)
Dagger 2知道,在创建Foo
实例时,它必须使用带有@Inject
注释的构造函数和单个参数Bar
Foo
没有其他依赖项,换句话说,完整的对象图是可用的
好的,谢谢大卫!看到这一点后,我意识到在构造函数中带有“@Inject”的类并没有提供所有内容,所以这就是错误所在。我甚至还没看那个,因为我正试图找到“@Provides”。
class Foo {
private final Bar bar;
@Inject
Foo(Bar bar) {
this.bar = bar;
}
}
class Bar {
@Inject
Bar() {}
}
class Activity extends AppCompatActivity {
@Inject Foo foo;
}