簡體   English   中英

在 Android 中使用 dagger2 進行依賴注入

[英]Dependency Injection with dagger2 in Android

我現在正在學習在 Android 中使用 Dagger 2。 我想我理解它的工作原理,但我對一些細節有一些疑問。 AndroidInjector中有關 Dagger 2 的各種教程中,我看到了 AndroidInjector 的使用。 看起來不錯,但我對此有一些疑問。

  1. 應用程序 class onCreate正在創建一個組件,該組件正在注入所有活動和片段。 這是在應用程序啟動時發生的,還是在創建特定活動或片段時發生的?
  2. 在這種方法中我不喜歡的是,當我有 100 個活動並且每個活動將有 2 個片段時,在 ActivityModule 中我將不得不寫 100 次:

    @ContributesAndroidInjector abstract fun contributeMyActivity(): MyActivity

    對於片段,同樣的事情又重復了 200 次。 這是很多樣板代碼。 我是對的還是我在這里遺漏了什么? 還有其他更好的方法嗎?

  3. 當應用程序組件注入所有活動時,是否不需要其他組件? 它只是在應用程序開始時創建的一個大的嗎? 在某些情況下可能需要其他組件嗎?

Dagger2 Android 在自定義范圍和子組件方面與標准 Dagger2 略有不同
Dagger2 android 為您提供了一點不用擔心子組件的杠桿作用。 您所說的實際上是一個子組件。 你的問題:

1.Application class onCreate 正在創建一個組件,該組件正在注入所有活動和片段。 這是在應用程序啟動時發生的,還是在創建特定活動或片段時發生的?

回答:是的,這取決於您在該組件中還有多少活動和多少片段以及您的啟動活動/片段是哪個活動/片段以及哪個活動與您的應用程序級組件直接關聯,是的應用程序注入/初始化只要應用程序不被破壞,就只有一次。

2.在這種方法中我不喜歡的是,當我有 100 個活動並且每個活動將有 2 個片段時,在 ActivityModule 中我將不得不寫 100 次:

@ContributesAndroidInjector 抽象有趣的contributeMyActivity(): MyActivity

對於片段,同樣的事情又重復了 200 次。 這是很多樣板代碼。 我是對的還是我在這里遺漏了什么? 還有其他更好的方法嗎?

回答:更好的方法是為每個活動提供 subComponent,您不必擔心第 199 個活動會做什么,因為您的第 199 個活動與第 199 個組件相關聯,而第 199 個組件僅連接到 appComponent 而不是另一個subComponent 並且一個 subComponent 與您的那個活動相關聯,並且一個活動與該片段或兩個片段相關聯,是的,不要忘記相應地 scope 每個組件,您不必擔心 appComponent 和 subComponent 就像繼承子可以訪問父母所擁有的一切。

3.當應用程序組件注入所有活動時,是否不需要其他組件?

回答:沒有!!
你有200個活動? 您可以為每個活動制作 200 個組件,每個組件將連接到應用程序級別組件以訪問應用程序級別的依賴關系/對象圖
現在我要問一個簡單的問題..
誰創建了 200 個活動?

Android 團隊建議使用 dagger2,他們承認這是陡峭的學習曲線,但他們仍然希望開發人員使用 dagger2,並且他們更關注標准 dagger2 而不是 android dagger2。
這是匕首 android 的缺點,它強制使用將您的活動與 androidContributeInjector() 結合起來,它不會讓您徒手使用組件,但標准 dagger2 可以做到這一點。我個人使用的是 dagger2-Android,但我切換到standard-Dagger2,現在它提供對組件或子組件的完全控制..

這就是你需要的實際上https://developer.android.com/training/dependency-injection/dagger-android

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM