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

在上一篇博客中我嘗試解釋了 dagger-android 注入。收到了一些評論,有的人說太複雜了不必 爲了使用新特性去升級。我想到會發生這種狀況,但我仍是以爲有必要去解釋dagger在幕後所作的工做。在閱讀這篇博客以前 我強烈建議先閱讀第一篇博客。本文中我會使用 **_@ContributesAndroidInjector_** 註解來簡化上篇博客中的代碼。前端

咱們經過下面的圖片來回憶第一篇博客中 dagger 結構圖。android

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

  • 建立一個 AppComponentAppModule
  • 建立 MainActivityMainActivityComponentMainActivityModule
  • 映射 MainActivityActivityBuilder (這樣 dagger 就可以知道 MainActivity 將被注入)。

讓咱們開始吧。在 MainActivity 中調用 AndroidInjection.inject(this) 而且在 MainActivityModule 中添加生成實例的方法。git

咱們只是想注入到 MainActivity ,卻作了不少事情。能不能進一步簡化?怎麼簡化?github

  • @Subcomponent 註解的 MainActivityComponentDetailActivityComponent 在圖中只是起到相似橋樑的做用。咱們可以很容易地寫出這兩個類。
  • 每當咱們添加 UI 組件做爲新的 subcomponent 都必須把 activity 映射到 ActivityBuilder module。這個工做常常是重複的。

不要作重複性的工做

dagger 的做者們顯然也意識到這個問題,給了一個新的解決方法。因而就有了這個新註解—— @ContributesAndroidInjector,使用這個註解咱們可以輕鬆地把 activities/fragments 添加到 dagger 結構中。下圖爲簡化後的 dagger 結構圖,代碼稍後給出。後端

經過上面的結構圖我想大家可以理解得更深。這裏給出修改後的代碼markdown

固然也能夠從 android injection 分支中拉取代碼。oop


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

相關文章
相關標籤/搜索