【发布时间】:2020-02-14 09:12:01
【问题描述】:
所以,我使用Koin 进行依赖注入,这是我在活动中所做的
class ModuleDetailActivity : AppCompatActivity() {
private lateinit var moduleId:String
private lateinit var levelModule:Level.Module
private val moduleViewModel: ModuleViewModel by viewModel { parameterOf(moduleId, levelModule) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
...
moduleId = intent.getString("module_id")
levelModule = intent.getParcelable("level_module")
...
...
}
}
现在,我有多个片段 ModuleDetailActivity 可以添加或替换,我希望在这些片段中使用相同的 moduleViewModel 实例,而不在 Fragment 中传递任何参数。
class ModuleDetailFragment : Fragment() {
private val moduleViewModel: ModuleViewModel by sharedViewModel()
...
...
}
我知道这会抛出一个错误,正如预期的那样,你可以看到这个
Caused by: org.koin.core.error.InstanceCreationException: Could not create instance for [Factory:'****.ui.module.ModuleViewModel']
这就是我初始化模块的方式
val viewModelModule = module {
viewModel { (id : String, levelModule:Level.Module) -> ModuleViewModel(id, levelModule, get()) }
}
有什么解决方案可以让我在活动内部定义相同的ModuleViewModel 实例而不在Fragment 中传递参数?
【问题讨论】:
标签: android kotlin viewmodel koin