问题描述
我有一个简单的片段和视图模型,我希望在片段内部使用,但是它会不断抛出以下错误:
Caused by: org.koin.core.error.NoBeanDefFoundException: No deFinition found for class:'com.me.ui.MovieListviewmodel'. Check your deFinitions!
viewmodel可以很好地加载到活动分类上,但不能加载到片段上。
下面的片段代码
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}
}
}
解决方法
您是否在MovieListApp类中检查了导入?您可能对startkoin {}方法的导入错误。 我建议你检查这个问题 Koin Android: org.koin.error.NoBeanDefFoundException
,这个问题在startKoin内部。
我必须传递其中的模块列表:
modules(AppComponent.getAllModules)