【发布时间】:2019-12-22 09:57:58
【问题描述】:
我有一个接口WordsDataSource 使用它实现了两个具体的类,即处理本地数据库的WordsLocalDataSource 和另一个处理服务器上在线处理数据的WordsRemoteDataSource。问题是当我尝试使用抽象类名WordsDataSource 将两个类注入存储库类时
DefaultWordsRepository(
private val wordsRemoteDataSource: WordsDataSource,
private val wordsLocalDataSource: WordsDataSource) {
并在 Application 类中添加依赖项,例如
class WordsApplication : Application(), KodeinAware {
override val kodein = Kodein.lazy {
import(androidXModule(this@WordsApplication))
bind() from singleton { WordsDatabase.getInstance(instance()) }
bind<WordsDao>() with singleton { instance<WordsDatabase>().wordsDao() }
bind() from singleton { WordsLocalDataSource(instance()) }
bind() from singleton { WordsRemoteDataSource() }
bind<WordsRepository>() with singleton { DefaultWordsRepository(instance(), instance()) }
bind() from provider { ViewModelFactory(instance()) }
}
然后在运行应用程序时,我在 logcat 中遇到以下问题
org.kodein.di.Kodein$NotFoundException: 2 bindings found that match bind<WordsDataSource>() with ?<WordsFragment>().? { ? }:
bind<WordsLocalDataSource>() with singleton { WordsLocalDataSource }
bind<WordsRemoteDataSource>() with singleton { WordsRemoteDataSource }
我已经尝试了解决此问题的方法,只需通过变量各自的具体类名来声明变量,例如
DefaultWordsRepository(
private val wordsRemoteDataSource: WordsRemoteDataSource,
private val wordsLocalDataSource: WordsLocalDataSource) {
但还是想知道有没有办法解决这个问题。
我正在为 kodein 使用以下依赖项
implementation "org.kodein.di:kodein-di-generic-jvm:6.3.3"
implementation "org.kodein.di:kodein-di-framework-android-x:6.3.3"
【问题讨论】:
标签: android kotlin dependency-injection kodein