首页 > 解决方案 > 无法使用 Koin 从片段内部加载视图模型

问题描述

我有一个简单的片段和视图模型,我希望在片段中使用,但是它不断抛出以下错误:

 Caused by: org.koin.core.error.NoBeanDefFoundException: No definition found for class:'com.me.ui.MovieListViewModel'. Check your definitions!

视图模型可以在活动类上很好地加载,但不能在片段上。

片段代码如下

class TopMoviesFragment : BaseFragment() {

    private val movieListViewModel: MovieListViewModel by viewModel()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        movieListViewModel.doSomething()

视图模型代码

class MovieListViewModel constructor(private val someData: SomeData) : ViewModel() {

     fun doSomething(){
        someData.do()
    }

}

Koin 设置

object AppComponent {
    val getAllModules = listOf(MainAppModule,
            ANotherMOdule,
            networkModule,
            uiModule)
}


val uiModule = module {
    factory { SOmeData(get()) }
    viewModel { MovieListViewModel(get()) }
}


class MovieListApp : Application() {
    override fun onCreate() {
        super.onCreate()
        startKoin{
            // Koin Android logger
            androidLogger()
            //inject Android context
            androidContext(this@MovieListApp)
            AppComponent.getAllModules}
    }
}

标签: androidkotlinkoin

解决方案


问题出在 startKoin 内部。

我必须在其中传递模块列表:

modules(AppComponent.getAllModules)

推荐阅读