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

南宫浩皛
2023-12-01

在您提到的存储库中,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没有其他依赖关系,换句话说,完整的对象图可用.

 类似资料: