如何在Room MVVM架构中实现Koin依赖注入并将DAO传入Repository
你需要先在Koin模块中注册UserDatabase和UserDao的实例,补全依赖链即可正常注入,完整Modules.kt代码如下:
val appModule = module { // 注册UserDatabase全局单例 single { UserDatabase.getDatabase( context = get(), // Koin自动获取已注入的Application上下文 scope = CoroutineScope(Dispatchers.IO) // 按需传入需要的协程作用域即可 ) } // 从已注册的UserDatabase实例中获取UserDao single { get<UserDatabase>().userDao() } // 原有逻辑保持不变,Koin会自动匹配已注册的依赖传入 single { UserRepository(get()) } viewModel { UserViewModel(get()) } }
配套注意事项:
- 你需要在自定义Application类初始化Koin时传入Application上下文,示例如下:
class MyApp : Application() { override fun onCreate() { super.onCreate() startKoin { androidContext(this@MyApp) // 注入全局上下文供Database初始化使用 modules(appModule) } } }
- 不要忘记在
AndroidManifest.xml的application节点添加android:name=".MyApp"属性,启用自定义Application类。 - 你当前
UserDatabase的getDatabase方法中传入的CoroutineScope参数暂无使用,若后续不需要实现数据库预填充等异步逻辑可直接删除该参数。
内容的提问来源于stack exchange,提问作者Yaqoob Bhatti
相关产品推荐
相关产品推荐

