refactor: integrate Koin for dependency injection across platforms

This commit is contained in:
2026-06-09 17:22:43 +02:00
parent 931d5e9d72
commit 17da9f6757
14 changed files with 71 additions and 15 deletions
+7
View File
@@ -65,6 +65,13 @@ kotlin {
implementation(libs.compose.uiToolingPreview)
implementation(libs.androidx.lifecycle.viewmodelCompose)
implementation(libs.androidx.lifecycle.runtimeCompose)
// DI
implementation(project.dependencies.platform(libs.koin.bom))
implementation(libs.koin.core)
implementation(libs.koin.core.viewmodel)
implementation(libs.koin.compose)
implementation(libs.koin.compose.viewmodel)
}
commonTest.dependencies {
implementation(libs.kotlin.test)
@@ -2,20 +2,22 @@ package fr.ajaury.gwenedeg
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.tooling.preview.Preview
import fr.ajaury.gwenedeg.records.data.InMemoryRecordRepository
import fr.ajaury.gwenedeg.di.appModule
import fr.ajaury.gwenedeg.records.ui.RecordsScreen
import fr.ajaury.gwenedeg.records.ui.viewmodel.RecordsViewModel
import org.koin.compose.KoinApplication
import org.koin.dsl.koinConfiguration
@Composable
@Preview
fun App() {
val viewModel = remember {
RecordsViewModel(InMemoryRecordRepository())
}
MaterialTheme {
RecordsScreen(viewModel)
KoinApplication(
configuration = koinConfiguration {
modules(appModule)
},
) {
MaterialTheme {
RecordsScreen()
}
}
}
@@ -0,0 +1,14 @@
package fr.ajaury.gwenedeg.di
import fr.ajaury.gwenedeg.records.data.InMemoryRecordRepository
import fr.ajaury.gwenedeg.records.domain.RecordRepository
import fr.ajaury.gwenedeg.records.ui.viewmodel.RecordsViewModel
import org.koin.core.module.dsl.bind
import org.koin.core.module.dsl.factoryOf
import org.koin.core.module.dsl.viewModelOf
import org.koin.dsl.module
val appModule = module {
factoryOf(::InMemoryRecordRepository) { bind<RecordRepository>() }
viewModelOf(::RecordsViewModel)
}
@@ -14,11 +14,21 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import fr.ajaury.gwenedeg.records.domain.Record
import fr.ajaury.gwenedeg.records.ui.viewmodel.RecordsViewModel
import org.koin.compose.viewmodel.koinViewModel
@Composable
fun RecordsScreen(viewModel: RecordsViewModel) {
fun RecordsScreen(viewModel: RecordsViewModel = koinViewModel()) {
val records by viewModel.uiState.collectAsStateWithLifecycle()
RecordsScreen(
records = records,
)
}
@Composable
fun RecordsScreen(records: List<Record>) {
Scaffold { innerPadding ->
LazyColumn(
modifier =
@@ -2,4 +2,5 @@ package fr.ajaury.gwenedeg
import androidx.compose.ui.window.ComposeUIViewController
@Suppress("ktlint:standard:function-naming")
fun MainViewController() = ComposeUIViewController { App() }