Koin делятся экземплярами между модулями - PullRequest
1 голос
/ 23 июня 2019

Я использую библиотеку Koin для проекта Android. Я хочу поделиться некоторыми экземплярами между модулями, поскольку они часто используются в приложении. Например:

val moduleA = module {
    scope(named<FragmentA>()) {
        scoped { FirebaseFirestore.getInstance() }

        scoped { LocalDatabase.getInstance(App.sContext) }
        scoped { NetworkDataSourceA(get()) }    
    }
}

val moduleB = module {
        scope(named<FragmentB>()) {
            scoped { FirebaseFirestore.getInstance() }

            scoped { LocalDatabase.getInstance(App.sContext) }
            scoped { NetworkDataSourceB(get()) }    
        }
    }

Как видно из следующих модулей, FirebaseFirestore.getInstance() и LocalDatabase.getInstance(App.sContext) одинаковы для обоих модулей. Есть ли способ, где я могу объявить, скажем, moduleC, который содержит FirebaseFirestore.getInstance() и LocalDatabase.getInstance(App.sContext), а затем вызвать его на moduleA и moduleB?

1 Ответ

0 голосов
/ 23 июня 2019
  • Вы можете сделать это, создав область действия.Хотя я не пробовал.

    val moduleA = module {
    scope(named("CommonScope")) {
    
    scoped { FirebaseFirestore.getInstance() }
    scoped { LocalDatabase.getInstance(App.sContext) }
    
    scoped { NetworkDataSourceA(get()) }   
    scoped { NetworkDataSourceB(get()) }  
    
      }
    }
    
  • Теперь создайте область в своем FragmentA, используя строку ниже (также то же самое для FragmentB для NetworkDataSourceB)

    private val commonScope = getKoin().getOrCreateScope("scope1",named("CommonScope"))
    val networkDataSourceA = commonScope.get<NetworkDataSourceA>()
    
  • И In onDestroy Метод

    commonScope.close()
    

    Для более подробной проверки Документация koin (8-й пункт)

...