0

我正在使用 koin 1.0.2 来管理依赖项注入,但它不适用于房间数据库,它返回 can't create definition for 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)
}
4

2 回答 2

1

我已经在带有示例实体的测试项目中尝试了您的代码,并且它有效。由于您尚未发布实际的错误描述,请执行/确保执行以下步骤,然后重试。

将以下依赖项添加到build.gradle

implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"

如果您使用 RxJava 作为房间,请添加以下行

implementation "androidx.room:room-rxjava2:$room_version"

应用kotlin-kapt插件

apply plugin: 'kotlin-kapt'

清洁和建造。

如果您仍然遇到问题,请考虑使用 logcat 堆栈跟踪编辑问题。

于 2019-03-13T09:07:23.910 回答
0

Context您是否在其他模块中声明了对象的定义?因为您的数据库方法需要这个,而您正在调用get()解决它。如果没有,只需更改

single { UserDatabase.getInstance(get()) }

single { UserDatabase.getInstance(androidContext()) }

于 2019-03-13T16:47:45.940 回答