簡體   English   中英

使用 Hilt/Dagger2 注入密封類

[英]Inject sealed class with Hilt/Dagger2

我必須通過構造函數注入一個密封類,但我收到編譯錯誤:

  • 沒有@Provides-annotated 方法就無法提供

所以,我想做的是創建一個像這樣的密封:

sealed class Alphabet {
    object A: Alphabet()
    object B: Alphabet()
    data class C (val x: String): Alphabet()
    data class D (val y: Int): Alphabet()
}

並將其注入另一個類的構造函數中,如下所示:

@ViewModelScoped
class RandomUseCase @Inject constructor(
    private val alphabet: Alphabet
) {
    val z = when (alphabet) {
        A -> ...
        B -> ...
        C -> alphabet.x
        D -> alphabet.y
    }

那么,我該如何注入呢?

因此,根據 Kotlin 官方文檔,密封類的構造函數默認是私有的,Hilt 需要一個可見的構造函數來獲取其實現。

鏈接供參考:

通過閱讀你的問題,我真的不確定你為什么需要一個密封的課程。 注入類或實現的目的是獲取每個實例化的對象,但在密封類的情況下,您不能直接在其 Hilt 模塊中實例化密封類,如下所示。

@Singleton
@Binds
abstract fun provideAlphabet(alphabet: Alphabet): Alphabet

在此處輸入圖像描述

建議:

您可以簡單地在函數中傳遞一個密封類對象,然后在函數中進行比較,而不是注入密封類並在函數中使用它。

 fun sampleForSealed() {
    
    sampleForPassingSealed(Alphabet.A)
}

fun sampleForPassingSealed(alphabet: Alphabet) {
    when (alphabet) {
        Alphabet.A -> {

        }
        Alphabet.B -> {

        }
    }
}

快樂編碼!

暫無
暫無

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

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