@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中
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。