[英]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.