Android Koin,如何使用两个数据源制作存储库?

时间:2019-05-09 15:19:53

标签: android kotlin koin

我正在尝试使用Koin制作一个Android玩具项目。

我的项目有一个存储库和两个数据源(远程/缓存)。

以下是数据源:

interface DataSource

class CacheDataSource: DataSource

class RemoteDataSource: DataSource

这是存储库:

interface MyRepository

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

所以...我正在编写如下的appModule代码:

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 个答案:

答案 0 :(得分:0)

我找到了解决方法...

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

答案 1 :(得分:0)

您也可以这样做:

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