Коин NoBeanDefFoundException - PullRequest
       64

Коин NoBeanDefFoundException

3 голосов
/ 27 мая 2020

Короче говоря, я сталкиваюсь со странными сбоями приложения с NoBeanDefFoundException, но это происходит случайно. На некоторых устройствах он работает должным образом, а на других просто вылетает.

У меня есть многомодульный проект с большим количеством модулей коинов, и он работал должным образом. Но по мере роста приложения я решил немного реорганизовать его и использовать области видимости. В проекте у меня есть 4 типа области видимости:

  • root (создано Коином)
  • scope_activity
  • scope_flow
  • scope_fragment

Я использую связывание областей видимости для разрешения родительских зависимостей. Например, scope_fragment -> scope_flow -> scope_activity -> root. Также я загружаю модули частично.

Ниже я привожу кусок кода, чтобы вы могли получить контекст.

Вот как я объявляю модули:

val categoryDataModule = module {
    // here is root scope
    single<CategoryRepository> {
        CategoryRepositoryImpl(get(), get(), Dispatchers.Default)
    }
}


val categoryDomainModule = module {
    scope(named(DI.SCOPE_FRAGMENT)) {
        // this use case requires CategoryRepository implementation
        factory<GetFollowedCategoriesUseCase> { GetFollowedCategories(get()) }
    }
}

I Я создал модульный тест checkModules, и он не работает с NoBeanDefFoundException. Пытался отладить его и обнаружил, что область root здесь имеет только 2 зависимости в _instanceRegistry. Это приложение и контекст.

@RunWith(AndroidJUnit4::class)
class CheckModulesTest : KoinTest {

    @Test
    fun checkAllModules() {
        koinApplication {
            androidContext(ApplicationProvider.getApplicationContext())
            modules(
                listOf(
                    categoryDataModule,
                    categoryDomainModule
                )
            )
        }.checkModules()
    }
}

Итак, мой вопрос, как это исправить? Вероятно, я неправильно использую прицелы.

...