- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在关注 this实现 koin 依赖注入(inject)的文档,但它对我没有帮助。我被困在 Modules.kt
文件中 我不知道如何将数据库的 DAO 接口(interface)传递给 koin 的 module
中的 Repository
构造函数。
UserEntity.kt
@Entity(tableName = "user_table")
data class UserEntity(...)
UserDao.kt
@Dao
interface UserDao { ... }
UserRepository.kt
class UserRepository(private val userDao: UserDao) {...}
UserViewModel.kt
class UserViewModel(private val repository: UserRepository) : ViewModel() {...}
UserDatabase.kt
@Database(
entities = [UserEntity::class],
version = 1,
exportSchema = false
)
abstract class UserDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
@Volatile
private var INSTANCE: UserDatabase? = null
fun getDatabase(context: Context, scope: CoroutineScope): UserDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
UserDatabase::class.java,
"user_data_database"
).build()
INSTANCE = instance
instance
}
}
}
}
Modules.kt 这是 Koin 模块
val appModule = module{
single { UserRepository(get()) }
viewModel { UserViewModel(get()) }
}
最佳答案
首先在您从 Room Database 类扩展的类文件中。您将需要创建一个抽象函数来提供您的 Dao 接口(interface)实例,
@Database(entities = [Run::class],version = 1 , exportSchema = false)
abstract class RunningDatabase : RoomDatabase() {
abstract fun getRunDao(): RunDao
}
然后在您的模块中像这样为房间数据库提供实例,
single {
Room.databaseBuilder(
androidApplication,
RunningDatabase::class.java,
RUNNING_DATABASE_NAME
).build()
}
现在可以调用Room Database类的抽象函数来获取Dao接口(interface)的Instance。像这样,
single<RunningDao> {
val database = get<RunningDatabase>()
database.getRunDao()
}
现在您可以在任何构造函数中传递此接口(interface)。
关于android - 如何在 Room MVVM 架构中实现 Koin 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69834782/
我正在使用两个库,它们具有两个不同版本的 Koin 的依赖项。 其中一个图书馆有 org.koin:koin-android:2.0.1 另一个有 io.insert-koin:koin-core-j
我偶然发现了一个问题,我必须重新初始化我的 Retrofit API 类,因为 URL 发生了变化,所以我想告诉 Koin 重新初始化单个依赖项。我不想使用工厂,因为大多数时候它仍然是单例。 停止和启
收到消息错误 java.lang.RuntimeException: Unable to create application com.app.name.application.MainApplica
我最近删除了 jcenter()来自项目级构建 Gradle 的存储库。 从那时起,Koin(版本:2.2.2)开始给我下面的编译时错误:Could not find org.koin:koin-co
我有一个带有 MVVM 的简单 Android 项目,我正在使用 Koin。这些是我在 gradle 中的版本和依赖项: build.gradle // Koin implementation "or
我有一个模块: single{ (name: String) -> Person(name) } 当我这样做时: val alice: Person by inject {parametersOf("
我想知道如何使用 Koin 库正确地确定依赖关系的范围。 由于谷歌推荐 single Activity architecture AndroidX Navigation lib已成为通过轻松交换 Fr
我正在尝试使用 Koin 制作一个 Android 玩具项目。 我的项目有一个存储库和两个数据源(远程/缓存)。 以下是数据源: interface DataSource class CacheDat
我是测试新手,我将 Koin 改编为我的依赖注入(inject)。我的应用程序运行良好。它仍然具有登录功能。这是我的依赖类 模块.kt val applicationModule = module (
我的android项目中有两个模块,app模块和lib模块。 这两个模块都需要 Koin 进行 D.I.,所以我调用 startKoin在 MyApplication应用模块中的类和IninKoint
在我的 android 应用程序中,我有一个标记为 base 的模块。 base 中有几个类充当生命周期的基类(Controller、ViewModel 等)。我的应用程序在我的项目中与这些本地类一起
我对 Koin 和“androidTest”有疑问。因为 androidTest 启动了应用程序,所以我不需要在测试中自己启动 Koin。 现在我需要注入(inject)一个模拟服务。问题是,我在单例
我在 Android 项目中使用 Koin 作为我的 DI 框架,我想对我的模块进行单元测试。 例如:如果类 A 依赖于 B 和 C,请测试 B 和 C 是否包含在 Koin 图中,以及我是否将它们正
我正在我的 android 应用程序中实现 Koin DI。我成功地创建了一些模块。但是我遇到了一个异常,我试图从模块中的另一个获取对象。 这些是我的模块 val networkModule = mo
我有一个包含不同模块的应用程序,但项目正在增长,我们需要将项目拆分为不同的动态功能模块,因为用户(可能)不需要所有功能。我的问题是 Koin 需要从 Application 类启动应用程序将要加载的所
我正在开发一个新闻应用程序,我想在应用程序类中添加两个模块,但出现以下异常。 java.lang.RuntimeException: Unable to create application yodg
我有一个应用程序,每次用户登录时都会将用户数据保存在 SharedPref 中,但是当用户在前一个帐户注销后使用另一个帐户登录后,koin 仍然会获取以前的用户数据。 我已经检查了我的 createS
在构建基于 Kotlin 的 HTTP 服务器时,我正在尝试使用 Koin。 我正在使用一个框架,您可以在其中通过扩展一些框架提供的抽象类来编写您想要的行为,并在组件生命周期的各个点填写您的实现逻辑(
我是 KotlinPoet 的新手,我找不到如何创建以下 Koin 模块语句: internal val apiModules = module { single { get().create
我正在尝试使用 Koin 作为我的 D.I 来实现权限注入(inject) 但是,当我执行需要 PermissionRepository 的 ViewModel 时,我一直收到错误消息。 No def
我是一名优秀的程序员,十分优秀!