Inject drivers and setup di in network module

pull/2064/head
lihenggui 1 year ago
parent adeb133429
commit e084efd35b

@ -63,7 +63,7 @@ internal val appModules = module {
databaseModule,
dataModule,
dataStoreModule(),
*networkModule().toTypedArray(),
networkModule,
)
includes(featureModules)
includes(appViewModelModule)

@ -32,6 +32,9 @@ import com.google.samples.apps.nowinandroid.core.database.dao.TopicFtsDao
import com.google.samples.apps.nowinandroid.core.database.dao.TopicFtsDaoInterface
import com.google.samples.apps.nowinandroid.core.di.coroutineDispatcherModule
import org.koin.core.module.Module
import org.koin.core.module.dsl.factoryOf
import org.koin.core.module.dsl.singleOf
import org.koin.dsl.bind
import org.koin.dsl.module
internal expect val driverModule: Module
@ -41,34 +44,15 @@ internal val schemaModule = module {
}
internal val dbModule = module {
single { (driver: SqlDriver) ->
NiaDatabase(driver)
}
single { NiaDatabase(get()) }
}
internal val daoModule = module {
factory<TopicDaoInterface> { (database: NiaDatabase) ->
TopicDao(database, get())
}
factory <NewsResourceDaoInterface> { (database: NiaDatabase) ->
NewsResourceDao(database, get())
}
factory<TopicFtsDaoInterface> { (database: NiaDatabase) ->
TopicFtsDao(database, get())
}
factory<NewsResourceFtsDaoInterface> { (database: NiaDatabase) ->
NewsResourceFtsDao(database, get())
}
factory<RecentSearchQueryDaoInterface> { (database: NiaDatabase) ->
RecentSearchQueryDao(
database,
get(),
)
}
singleOf(::TopicDao) bind TopicDaoInterface::class
singleOf(::NewsResourceDao) bind NewsResourceDaoInterface::class
singleOf(::TopicFtsDao) bind TopicFtsDaoInterface::class
singleOf(::NewsResourceFtsDao) bind NewsResourceFtsDaoInterface::class
singleOf(::RecentSearchQueryDao) bind RecentSearchQueryDaoInterface::class
}
val databaseModule: Module get() = module {

@ -27,7 +27,8 @@ import org.koin.dsl.module
import java.util.Properties
internal actual val driverModule = module {
single<SqlDriver> { (schema: SqlSchema<AsyncValue<Unit>>) ->
single<SqlDriver> {
val schema: SqlSchema<AsyncValue<Unit>> = get()
JdbcSqliteDriver(
url = JdbcSqliteDriver.IN_MEMORY,
properties = Properties().apply { put("foreign_keys", "true") },

@ -17,6 +17,7 @@
package com.google.samples.apps.nowinandroid.core.network.di
import com.google.samples.apps.nowinandroid.core.network.BuildKonfig
import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource
import com.google.samples.apps.nowinandroid.core.network.retrofit.RetrofitNiaNetwork
import de.jensklingenberg.ktorfit.Ktorfit
import de.jensklingenberg.ktorfit.converter.CallConverterFactory
@ -25,11 +26,10 @@ import de.jensklingenberg.ktorfit.ktorfit
import io.ktor.client.HttpClient
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
import kotlinx.serialization.json.Json
import org.koin.core.annotation.ComponentScan
import org.koin.core.annotation.Module
import org.koin.core.module.Module
import org.koin.core.module.dsl.singleOf
import org.koin.dsl.bind
import org.koin.dsl.module
import org.koin.ksp.generated.module
internal val jsonModule = module {
single<Json> {
@ -42,7 +42,8 @@ internal val jsonModule = module {
internal val ktorfitModule = module {
single<Ktorfit> {
ktorfit {
baseUrl(BuildKonfig.BACKEND_URL)
// TODO use the correct URL
baseUrl("https://${BuildKonfig.BACKEND_URL}/")
httpClient(
HttpClient {
install(ContentNegotiation) {
@ -56,12 +57,9 @@ internal val ktorfitModule = module {
)
}
}
singleOf(::RetrofitNiaNetwork)
}
fun networkModule() = listOf(NetworkModule().module, jsonModule, ktorfitModule)
@Module
@ComponentScan
class NetworkModule
val networkModule: Module = module {
includes(jsonModule, ktorfitModule)
singleOf(::RetrofitNiaNetwork) bind NiaNetworkDataSource::class
}

@ -1,4 +1,4 @@
## This file provides default values to modules using the secrets-gradle-plugin. It is necessary
# because the secrets properties file is not under source control so CI builds will fail without
# default values.
BACKEND_URL="http://example.com"
BACKEND_URL="http://example.com/"
Loading…
Cancel
Save