簡體   English   中英

如何在 koin 中將接口作為參數傳遞

[英]How to pass an interface as parameter in koin

我是 koin 的初學者。

我有一個名為“MesheRepoImpl”的方法,它獲取一個接口作為參數。

我知道我不能將接口傳遞給 Koin 中的方法,所以我創建了一個 class 並從接口擴展它,然后我在 koin 模塊中添加了 class,所以我使用 class 作為 MesheRepoImpl 的參數。

但是 android 工作室給我這個錯誤:

原因:org.koin.core.error.NoBeanDefFoundException:|- 未找到 class 的定義:'com.app.meshe.data.repo.MesheRepo'。 檢查你的定義!

這是我的 Di 模塊:

val mesheModule =
    module {
        single { getInstance(androidContext()) }
        single { MesheLocalDataSource() } //*
        single { MesheRepoImpl(get()) } //**
        factory { TaskViewModelFactory(get()) }
        viewModel { TaskViewModel(get()) }
        viewModel { RewardViewModel(get()) }
        viewModel {MainViewModel()}
    }

1 星線是我的 class 從接口延伸出來,2 星線是 class 獲取接口作為參數。

如果不能使用 class,如何將接口作為參數傳遞?

由於仍然沒有答案,我建議你考慮去

interface MesheRepo
class MeshoRepoImpl(): MeshoRepo

在你的

interface MesheRepo
class MeshoRepoImpl(val IRepo: MeshoRepo)

因此,只需實現MeshoRepo而不是將其作為參數傳遞給MeshoRepoImpl

嘗試直接回答您的問題,您可以在 Koin 模塊中定義接口並傳遞它們,但您還必須提供它們的實現:

val mesheModule = module {
  single<MeshoRepo> { MeshoRepoImpl() }
  single { MeshoRepoImpl(get()) } // <-- it's like a deadlock, so I still do not see any sense to pass an interface over implementing it
}

並且,請不要忘記接口不是 object。

暫無
暫無

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

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