- 原文地址:New Android Injector with Dagger 2—part 2
- 原文作者:Mert Şimşek
- 譯文出自:掘金翻譯計劃
- 本文永久連結:github.com/xitu/gold-m…
- 譯者:woitaylor
- 校對者:XPGSnail LeviDing
在上一篇部落格中我嘗試解釋了 dagger-android
注入。收到了一些評論,有的人說太複雜了沒必要
為了使用新特性去升級。我想到會發生這種情況,但我還是覺得有必要去解釋dagger在幕後所做的工作。在閱讀這篇部落格之前
我強烈建議先閱讀第一篇部落格。本文中我會使用 **_@ContributesAndroidInjector_**
註解來簡化上篇部落格中的程式碼。
我們通過下面的圖片來回憶第一篇部落格中 dagger
結構圖。
我們一步步來檢查該圖譜。我只介紹 MainActivity
這部分。其他部分的邏輯一樣。
- 建立一個
AppComponent
和AppModule
。 - 建立
MainActivity
,MainActivityComponent
,MainActivityModule
。 - 對映
MainActivity
到ActivityBuilder
(這樣dagger
就能夠知道MainActivity
將被注入)。
讓我們開始吧。在 MainActivity
中呼叫 AndroidInjection.inject(this) 並且在 MainActivityModule
中新增生成例項的方法。
我們只是想注入到 MainActivity
,卻做了很多事情。能不能進一步簡化?怎麼簡化?
@Subcomponent
註解的MainActivityComponent
和DetailActivityComponent
在圖中只是起到類似橋樑的作用。我們能夠很容易地寫出這兩個類。- 每當我們新增
UI
元件作為新的subcomponent
都必須把activity
對映到ActivityBuilder module
。這個工作經常是重複的。
不要做重複性的工作
dagger
的作者們顯然也意識到這個問題,給了一個新的解決方法。於是就有了這個新註解—— @ContributesAndroidInjector,使用這個註解我們能夠輕鬆地把 activities/fragments
新增到 dagger
結構中。下圖為簡化後的 dagger
結構圖,程式碼稍後給出。
通過上面的結構圖我想你們能夠理解得更深。這裡給出修改後的程式碼。
當然也可以從 android injection
分支中拉取程式碼。
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。