@Inject
提供要new的實例,例如Presenter
@Module
Provides給@Inject提供依賴,例如Presenter的構造方法要依賴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);
總結一下注入過程
- 首先MainActivity需要是使用PlayViewPresenter實例,因此用Inject對PlayViewPresenter進行注解,然后在PlayViewPresenter的構造方法中進行注解.
- 因為PlayViewPresenter的構造方法中需要依賴IMainView,所以定義了一個Module,@provides用于提供這個依賴
- 定義Compontent來講Module中提供的依賴注入到PlayViewPresenter中
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者