@Inject
提供要new的實例,例如Presenter
@Module
Provides給@Inject提供依賴,例如Presenter的構(gòu)造方法要依賴IView.
@Component
將@Inject和@Module聯(lián)系起來的橋梁,從@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聯(lián)系起來,將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);
總結(jié)一下注入過程
- 首先MainActivity需要是使用PlayViewPresenter實例,因此用Inject對PlayViewPresenter進行注解,然后在PlayViewPresenter的構(gòu)造方法中進行注解.
- 因為PlayViewPresenter的構(gòu)造方法中需要依賴IMainView,所以定義了一個Module,@provides用于提供這個依賴
- 定義Compontent來講Module中提供的依賴注入到PlayViewPresenter中
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。