[譯] 全新 Android 注入器 : Dagger 2 (二)

Landroid發表於2017-12-20

在上一篇部落格中我嘗試解釋了 dagger-android 注入。收到了一些評論,有的人說太複雜了沒必要 為了使用新特性去升級。我想到會發生這種情況,但我還是覺得有必要去解釋dagger在幕後所做的工作。在閱讀這篇部落格之前 我強烈建議先閱讀第一篇部落格。本文中我會使用 **_@ContributesAndroidInjector_** 註解來簡化上篇部落格中的程式碼。

我們通過下面的圖片來回憶第一篇部落格中 dagger 結構圖。

[譯] 全新 Android 注入器 : Dagger 2 (二)

我們一步步來檢查該圖譜。我只介紹 MainActivity 這部分。其他部分的邏輯一樣。

  • 建立一個 AppComponentAppModule
  • 建立 MainActivityMainActivityComponentMainActivityModule
  • 對映 MainActivityActivityBuilder (這樣 dagger 就能夠知道 MainActivity 將被注入)。

讓我們開始吧。在 MainActivity 中呼叫 AndroidInjection.inject(this) 並且在 MainActivityModule 中新增生成例項的方法。

我們只是想注入到 MainActivity ,卻做了很多事情。能不能進一步簡化?怎麼簡化?

  • @Subcomponent 註解的 MainActivityComponentDetailActivityComponent 在圖中只是起到類似橋樑的作用。我們能夠很容易地寫出這兩個類。
  • 每當我們新增 UI 元件作為新的 subcomponent 都必須把 activity 對映到 ActivityBuilder module。這個工作經常是重複的。

不要做重複性的工作

dagger 的作者們顯然也意識到這個問題,給了一個新的解決方法。於是就有了這個新註解—— @ContributesAndroidInjector,使用這個註解我們能夠輕鬆地把 activities/fragments 新增到 dagger 結構中。下圖為簡化後的 dagger 結構圖,程式碼稍後給出。

[譯] 全新 Android 注入器 : Dagger 2 (二)

通過上面的結構圖我想你們能夠理解得更深。這裡給出修改後的程式碼

當然也可以從 android injection 分支中拉取程式碼。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章