@Inject
提供要new的实例,例如Presenter
@Module
Provides给@Inject提供依赖,例如Presenter的构造方法要依赖IView.
@Component
将@Inject和@Module联系起来的桥梁,从@Module中获取依赖并将依赖注入给@Inject
例子:
Inject
public class PlayViewPresenter {
//IMainView 需要Moudule提供的依赖
private final IMainView mView;
@Inject
PlayViewPresenter(IMainView view) {
mView = view;
}
public void say(){
System.out.println("hahahahaha");
}
}
Module
@Module
public class MainModule {
private final IMainView mView;
public MainModule(IMainView view) {
mView = view;
}
@Provides
// 需要给Inject提供的依赖
IMainView provideMainView() {
return mView;
}
}
Component
//将Moudule与Inject联系起来,将module提供的依赖注入到Inject中
@Component(modules = MainModule.class)
public interface MainComponent {
void inject(MainActivity activity);
}
使用
@Inject
PlayViewPresenter playViewPresenter;
// 注入
DaggerMainComponent.builder().mainModule(new MainModule(this)).build().inject(this);
总结一下注入过程
- 首先MainActivity需要是使用PlayViewPresenter实例,因此用Inject对PlayViewPresenter进行注解,然后在PlayViewPresenter的构造方法中进行注解.
- 因为PlayViewPresenter的构造方法中需要依赖IMainView,所以定义了一个Module,@provides用于提供这个依赖
- 定义Compontent来讲Module中提供的依赖注入到PlayViewPresenter中