关于Dagger 2.连接@inject和@provide

时间:2016-08-12 08:42:42

标签: dagger-2

如果有@inject,则表示必须有@provide? inject field从@provide方法获取其值?

2 个答案:

答案 0 :(得分:1)

如果您使用模块

,则为是
@Module
public class SomeModule {
    @Provides
    Unscoped unscoped() {
        return new Unscoped();
    }

    @Provides
    @Singleton
    Scoped scoped() {
        return Scoped();
    }
}
带有@Inject构造函数的

BUT 类会自动附加到您的作用域组件,即使没有为其指定模块:

@Singleton
public class Scoped {
    @Inject
    public Scoped() {
    }
}

public class Unscoped {
    @Inject
    public Unscoped() {
    }
}

答案 1 :(得分:0)

如果有@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;
    }

这里要注意的一点是Constructor Injection解决了两件事

  • 实例化对象
  • 通过将对象添加到对象图表来提供对象。