[英]Dagger 2 issue:@Subcomponent.Builder methods that have no arguments must return the @Subcomponent type
[英]Dagger 2 inject subcomponent.builder
我看到一些代碼在其中注入了SubComponent.Builder
。 例如:
class MyClass @Inject constructor(val mySubcomponentBuilder: MySubComponent.Builder) {
fun someFunc(knownAtRuntime: String) {
mySubcomponentBuilder.withSomethingIKnowAtRuntime(knownAtRuntime).build()
}
}
我們為什么(以及我們應該在哪里/何時)這樣做(即注入 subcomponent.builders)?
這有點像輔助注入,我們可以在其中提供我們只在運行時知道的圖形所需的實例嗎?
是的,子組件構建器有點像輔助注入,但它是針對可注入 Dagger 依賴項的整個子圖。
子組件是從父組件派生的附加組件。 在 Guice 中,它們類似於兒童注射器; 在 Dagger 1 中,它們類似於 子圖。 它們允許您在父綁定之上添加附加綁定,如通過附加模塊指定的那樣。
從它們允許來自不同圖的綁定的意義上說,它們可以比作組件依賴,但它們與父組件同時生成,並且可以透明地使用父組件中定義的綁定。 dagger.android 和 Hilt 包都使用子組件。
每個組件都可以有自己的scope ,子組件也不例外:您可能會看到@Singleton ApplicationComponent
的子組件為服務器的@RequestScope RequestComponent
RequestComponent 或@ActivityScope ActivityComponent
的子組件為 Android。每個請求或活動都會獲得自己的組件實例。 這會讓你注入一個@RequestScoped MetricsService
或@ActivityScoped User
,它們在相同的請求/活動中是相同的實例,但在請求/活動之間是不同的實例。
如果子組件具有非空構造函數,則它們可能需要實例化模塊,或者它們可能需要通過@BindsInstance
綁定實例。 Subcomponent Builder
允許您像指定Component Builder一樣指定它們。
您還可以選擇使用Subcomponent.Factory ,類似於Component.Factory但將所有 Builder 參數作為 arguments 用於一次方法調用。
盡管您可以將子組件聲明為在父組件上指定的工廠方法,但這會阻止 Dagger 修剪未使用的依賴項,因為它看不到誰在請求子組件。 通過在模塊上聲明子組件並將它們的構建器注入到圖中,如果您根本不調用它們,Dagger 可以刪除整個子組件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.