关于Dagger 二、@inject 和@provide 的联系
About Dagger 2. Connection of @inject and @provide
有@inject就一定有@provide?
inject 字段从模块的@provide 方法获取它的值?
如果有@Inject 注解那么它的依赖可以通过两种方式提供:
通过使用在模块中提供注解
@Provides
TasksPresenter provide TasksPresenter(TasksRepository tasksRepository, TasksContract.View tasksView) {
return new TasksPresenter(tasksRepository,tasksView);
}
通过构造函数注入
@Inject
TasksPresenter(TasksRepository tasksRepository, TasksContract.View tasksView) {
mTasksRepository = tasksRepository;
mTasksView = tasksView;
}
这里要注意的一件事是构造函数注入解决了两件事
- 实例化对象
- 通过将对象添加到对象图来提供对象。
是的,如果你使用模块
@Module
public class SomeModule {
@Provides
Unscoped unscoped() {
return new Unscoped();
}
@Provides
@Singleton
Scoped scoped() {
return Scoped();
}
}
BUT 类 with @Inject
构造函数会自动附加到您的作用域组件,即使没有为其指定模块也是如此:
@Singleton
public class Scoped {
@Inject
public Scoped() {
}
}
public class Unscoped {
@Inject
public Unscoped() {
}
}
有@inject就一定有@provide? inject 字段从模块的@provide 方法获取它的值?
如果有@Inject 注解那么它的依赖可以通过两种方式提供:
通过使用在模块中提供注解
@Provides
TasksPresenter provide TasksPresenter(TasksRepository tasksRepository, TasksContract.View tasksView) {
return new TasksPresenter(tasksRepository,tasksView);
}
通过构造函数注入
@Inject
TasksPresenter(TasksRepository tasksRepository, TasksContract.View tasksView) {
mTasksRepository = tasksRepository;
mTasksView = tasksView;
}
这里要注意的一件事是构造函数注入解决了两件事
- 实例化对象
- 通过将对象添加到对象图来提供对象。
是的,如果你使用模块
@Module
public class SomeModule {
@Provides
Unscoped unscoped() {
return new Unscoped();
}
@Provides
@Singleton
Scoped scoped() {
return Scoped();
}
}
BUT 类 with @Inject
构造函数会自动附加到您的作用域组件,即使没有为其指定模块也是如此:
@Singleton
public class Scoped {
@Inject
public Scoped() {
}
}
public class Unscoped {
@Inject
public Unscoped() {
}
}