#android #kotlin #koin
#Android #kotlin #коин
Вопрос:
Я использую koin 1.0.2 для управления внедрением зависимостей, но он не работает с базой данных комнат, он возвращает can’t create definition для single… Вот мой код:
@Database(entities = [UserEntity::class], version = 1, exportSchema = false)
abstract class UserDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
private var INSTANCE: UserDatabase? = null
fun getInstance(context: Context): UserDatabase {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(
context,
UserDatabase::class.java,
"user_database")
.allowMainThreadQueries()
.build()
}
return INSTANCE!!
}
}
}
val DatabaseModule = module {
single { UserDatabase.getInstance( get())}
}
class UserApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoin(getModules())
}
private fun getModules() = listOf(DatabaseModule, RepositoryModule, ViewModule)
}
Ответ №1:
Я попробовал ваш код в тестовом проекте с примерами объектов, и это сработало. Поскольку вы не опубликовали фактическое описание ошибки, пожалуйста, выполните следующие шаги и повторите попытку.
Добавьте следующие зависимости к build.gradle
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
Если вы используете RxJava для room, добавьте также следующую строку
implementation "androidx.room:room-rxjava2:$room_version"
Примените kotlin-kapt
плагин
apply plugin: 'kotlin-kapt'
очистка и сборка.
Если вы все еще сталкиваетесь с проблемой, рассмотрите возможность редактирования вопроса с помощью трассировки стека logcat.
Ответ №2:
Объявили ли вы определение для Context
объекта в других модулях? Потому что ваш метод базы данных нуждается в этом, и вы вызываете get()
для его решения. Если нет, просто измените
single { UserDatabase.getInstance(get()) }
Для
single { UserDatabase.getInstance(androidContext()) }