Migrate network module to use koin

pull/2064/head
lihenggui 1 year ago
parent d07902f1c0
commit d018cf5789

@ -19,11 +19,10 @@ import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.STRING
plugins {
alias(libs.plugins.nowinandroid.kmp.library)
alias(libs.plugins.nowinandroid.android.library.jacoco)
alias(libs.plugins.nowinandroid.kotlin.inject)
alias(libs.plugins.nowinandroid.di.koin)
alias(libs.plugins.ktrofit)
alias(libs.plugins.buildkonfig)
id("kotlinx-serialization")
id("com.google.devtools.ksp")
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
}

@ -27,12 +27,13 @@ import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import kotlinx.serialization.json.Json
import me.tatarka.inject.annotations.Inject
import org.koin.core.annotation.Single
/**
* [NiaNetworkDataSource] implementation that provides static news resources to aid development
*/
class DemoNiaNetworkDataSource @Inject constructor(
@Single
class DemoNiaNetworkDataSource(
@Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher,
private val networkJson: Json,
) : NiaNetworkDataSource {

@ -17,38 +17,51 @@
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.retrofit.RetrofitNiaNetwork
import de.jensklingenberg.ktorfit.Ktorfit
import de.jensklingenberg.ktorfit.converter.CallConverterFactory
import de.jensklingenberg.ktorfit.converter.FlowConverterFactory
import de.jensklingenberg.ktorfit.ktorfit
import io.ktor.client.HttpClient
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
import io.ktor.serialization.kotlinx.json.json
import kotlinx.serialization.json.Json
import me.tatarka.inject.annotations.Component
import me.tatarka.inject.annotations.Provides
import org.koin.core.annotation.ComponentScan
import org.koin.core.annotation.Module
import org.koin.core.module.dsl.singleOf
import org.koin.dsl.module
import org.koin.ksp.generated.module
@Component
abstract class NetworkModule {
@Provides
fun providesNetworkJson(): Json = Json {
ignoreUnknownKeys = true
internal val jsonModule = module {
single<Json> {
Json {
ignoreUnknownKeys = true
}
}
}
@Provides
fun provideKtorfit(json: Json): Ktorfit = ktorfit {
baseUrl(BuildKonfig.BACKEND_URL)
httpClient(
HttpClient {
install(ContentNegotiation) {
json(json)
}
},
)
converterFactories(
FlowConverterFactory(),
CallConverterFactory(),
)
internal val ktorfitModule = module {
single<Ktorfit> {
ktorfit {
baseUrl(BuildKonfig.BACKEND_URL)
httpClient(
HttpClient {
install(ContentNegotiation) {
get<Json>()
}
},
)
converterFactories(
FlowConverterFactory(),
CallConverterFactory(),
)
}
}
singleOf(::RetrofitNiaNetwork)
}
val networkModule = listOf(NetworkModule().module, jsonModule, ktorfitModule)
@Module
@ComponentScan
class NetworkModule

@ -24,7 +24,6 @@ import de.jensklingenberg.ktorfit.Ktorfit
import de.jensklingenberg.ktorfit.http.GET
import de.jensklingenberg.ktorfit.http.Query
import kotlinx.serialization.Serializable
import me.tatarka.inject.annotations.Inject
/**
* Retrofit API declaration for NIA Network API
@ -62,7 +61,7 @@ internal data class NetworkResponse<T>(
/**
* [Ktrofit] backed [NiaNetworkDataSource]
*/
internal class RetrofitNiaNetwork @Inject constructor(
internal class RetrofitNiaNetwork(
ktorfit: Ktorfit,
) : NiaNetworkDataSource {

Loading…
Cancel
Save