Android Koin, Как сделать репозиторий, используя два источника данных? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь создать игрушечный проект для Android, используя Коин.

В моем проекте есть один репозиторий и два источника данных (удаленный / кеш).

Вот источники данных:

interface DataSource

class CacheDataSource: DataSource

class RemoteDataSource: DataSource

А вот и репозиторий:

interface MyRepository

class MyRepositoryImpl(
    val cacheDataSource: DataSource,
    val remoteDataSource: DataSource
): MyRepository

Итак ... Я пишу код приложения как:

val appModule = module {
    single<DataSource>(StringQualifier("cache")) { CacheDataSource() }
    single<DataSource>(StringQualifier("remote")) { RemoteDataSource() }
    single<MyRepository> { MyRepositoryImpl() as MyRepository by inject("???") }
}

И ...

Я тоже пробовал код ниже ...:

val appModule = module {
    single<DataSource>(StringQualifier("cache")) { CacheDataSource() }
    single<DataSource>(StringQualifier("remote")) { RemoteDataSource() }
    single<MyRepository> { MyRepositoryImpl(get<MoviesDataSource>(name = "cache"), get<MoviesDataSource>(name = "remote")) }
}

Но я не знаю, как мне это сделать?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Я нашел решение ...

val appModule = module {
    single<DataSource>(StringQualifier("cache")) { CacheDataSource() }
    single<DataSource>(StringQualifier("remote")) { RemoteDataSource() }
    single<MyRepository> { MyRepositoryImpl(get(StringQualifier("cache")), get(StringQualifier("remote"))) }
}
0 голосов
/ 15 июля 2019

Вы тоже можете сделать это:

val appModule = module {
    single<CacheDataSource> { CacheDataSource() }
    single<RemoteDataSource> { RemoteDataSource() }
    single<MyRepository> { MyRepositoryImpl(get(), get()) }
}
...