Короче говоря, я сталкиваюсь со странными сбоями приложения с 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()
}
}
Итак, мой вопрос, как это исправить? Вероятно, я неправильно использую прицелы.