1

我正在尝试使用 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")) }
}

但我不知道我该怎么做?

4

2 回答 2

3

我找到了解决方案...

val appModule = module {
    single<DataSource>(StringQualifier("cache")) { CacheDataSource() }
    single<DataSource>(StringQualifier("remote")) { RemoteDataSource() }
    single<MyRepository> { MyRepositoryImpl(get(StringQualifier("cache")), get(StringQualifier("remote"))) }
}
于 2019-05-09T15:55:05.253 回答
0

你也可以这样做:

val appModule = module {
    single<CacheDataSource> { CacheDataSource() }
    single<RemoteDataSource> { RemoteDataSource() }
    single<MyRepository> { MyRepositoryImpl(get(), get()) }
}
于 2019-07-15T11:46:41.953 回答