Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android架构蓝图”;todo‑;mvp&x2011;匕首;,@Provides for TasksRepository在哪里?_Java_Android_Kotlin_Dagger 2_Dagger - Fatal编程技术网

Java Android架构蓝图”;todo‑;mvp&x2011;匕首;,@Provides for TasksRepository在哪里?

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

从这里查看Android架构蓝图“todo‑mvp‑dagger”:

我试图理解Dagger2的实现,但我似乎不明白他们是如何让Dagger2提供TasksRepository的

他们为“ProvideTaskSksLocalDataSource”和“ProvideTaskSksRemoteDataSource”提供了
,但实际的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;
    
    }