Android Koin NoBeanDefFoundException только иногда - PullRequest
0 голосов
/ 05 марта 2020

У меня есть koin modoule, которые обычно работают. но иногда он получает cra sh (обычно, когда я получаю взад-вперед от моего фрагмента) с этой ошибкой:

Caused by: org.koin.core.error.NoBeanDefFoundException: No definition found for 'com.daytwo.NewSearch.ViewModels.SearchViewModel' has been found. Check your module definitions.

происходит, когда я пытаюсь что-то сделать с моей viewModel. Я буду рад, если у кого-нибудь есть предложения

соответствующая часть из моего фрагмента:

 var scope : Scope? = getKoin().getOrCreateScope(mainScopeId, named("SearchFragmentScope"))
    var preferenceScope = getKoin().getOrCreateScope(prepScopeId + "pref", named("PreferenceScope"))
    val searchViewModel : SearchViewModel by scope?.inject{ parametersOf(preferenceScope.id, openForm, searchTabs) }

private fun initSearchView(){

        searchViewModel.liveDataShowXButton.observe(viewLifecycleOwner, Observer {
            search_clear_x_button.visibility = it.isInvisible()

        })
}

module.kt

val NewSearchModule = module {

    single{
        HighScoreFilter()
    }

    scope(named("SearchFragmentScope")) {

        scoped { SearchRepository() }

        viewModel { (preferenceScopeId : ScopeID, openFrom : SearchOpenFrom, tabList : List<SearchTabEnum>)  ->
            get<SearchRepository>().tabList = tabList
            getScope(preferenceScopeId).get<PreferenceRepository>().tabList = tabList
            SearchViewModel(get(), getScope(preferenceScopeId).get(), openFrom)
        }

        viewModel { (preferenceScopeId : ScopeID, enum: SearchTabEnum, openFrom : SearchOpenFrom) ->

            when (enum) {
                SearchTabEnum.Restaurants -> RestaurantsSearchResultViewModel(get(), getScope(preferenceScopeId).get(),openFrom)
                SearchTabEnum.FoodsAndBrands -> FoodSearchResultViewModel(get(), getScope(preferenceScopeId).get(), openFrom, androidContext())
                SearchTabEnum.Meals -> MealsSearchResultViewModel(get(), getScope(preferenceScopeId).get(),openFrom)
                SearchTabEnum.Favorites -> FavoriteSearchResultViewModel(get(), getScope(preferenceScopeId).get(),openFrom)
                else -> FoodSearchResultViewModel(get(), get(), openFrom,  androidContext())
            }
        }
    }

    scope(named("PreferenceScope")) {
        scoped { PreferenceRepository(get()) }
    }
}
...