Dagger2注入過程

@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ù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容