У меня есть интерфейс WordsDataSource
, с помощью которого я реализовал два конкретных класса, а именно WordsLocalDataSource
, который работает с локальной базой данных, и еще один WordsRemoteDataSource
, который работает с данными в режиме онлайн на сервере. Проблема заключается в том, что я пытаюсь внедрить два класса в класс репозитория, используя абстрактное имя класса WordsDataSource
вроде
DefaultWordsRepository(
private val wordsRemoteDataSource: WordsDataSource,
private val wordsLocalDataSource: WordsDataSource) {
и добавляя зависимости в класс приложения, например
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()) }
}
Затем при запускеПриложение, с которым я сталкиваюсь в журнале регистрации следующих проблем:
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"