Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

migrate to dagger #2

Open
wants to merge 1 commit into
base: di/kotlin-inject
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 5 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,11 @@ dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0-RC")
//implementation("io.insert-koin:koin-core:3.5.3")

ksp("me.tatarka.inject:kotlin-inject-compiler-ksp:0.6.3")
implementation("me.tatarka.inject:kotlin-inject-runtime:0.6.3")
// ksp("me.tatarka.inject:kotlin-inject-compiler-ksp:0.6.3")
// implementation("me.tatarka.inject:kotlin-inject-runtime:0.6.3")

ksp("com.google.dagger:dagger-compiler:2.48")
implementation("com.google.dagger:dagger:2.48")

}

Expand Down
20 changes: 10 additions & 10 deletions src/main/kotlin/dev/rivu/bookstore/BookStore.kt
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
package dev.rivu.bookstore

import dev.rivu.bookstore.data.di.DataComponent
import dev.rivu.bookstore.data.di.create
import dev.rivu.bookstore.di.AppComponent
import dev.rivu.bookstore.di.BooksAppScope
import dev.rivu.bookstore.di.create
import dev.rivu.bookstore.di.DaggerAppComponent
import dev.rivu.bookstore.presentation.BookStoreStates
import dev.rivu.bookstore.presentation.BooksViewModel
import javax.inject.Inject
import kotlinx.coroutines.runBlocking
import me.tatarka.inject.annotations.Inject
import kotlin.system.exitProcess

fun main() = runBlocking {
AppComponent::class.create(DataComponent::class.create()).app.runApp()
DaggerAppComponent
.create()
.bookStoreApp()
.runApp()
}

@BooksAppScope
@Inject
class BookStoreApp(val viewModel: BooksViewModel) {
class BookStoreApp @Inject constructor() {

@Inject lateinit var viewModel: BooksViewModel


suspend fun runApp() {
viewModel.booksState.collect { latestState ->
Expand Down
5 changes: 0 additions & 5 deletions src/main/kotlin/dev/rivu/bookstore/data/BooksLocalDS.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
package dev.rivu.bookstore.data

import dev.rivu.bookstore.di.BooksAppScope
import me.tatarka.inject.annotations.Inject


@BooksAppScope
@Inject
class BooksLocalDS : BooksDS {
private val books = mutableListOf<Book>()

Expand Down
17 changes: 5 additions & 12 deletions src/main/kotlin/dev/rivu/bookstore/data/BooksRepo.kt
Original file line number Diff line number Diff line change
@@ -1,23 +1,16 @@
package dev.rivu.bookstore.data

import dev.rivu.bookstore.di.BooksAppScope
import me.tatarka.inject.annotations.Inject
import javax.inject.Inject
import javax.inject.Named


@BooksAppScope
@Inject
class BooksRepo(
private val dsMap: Map<String, BooksDS>
class BooksRepo @Inject constructor(
@Named("localDS") private val localDS: BooksDS,
@Named("remoteDS") private val remoteDS: BooksDS,
) {

private val localDS: BooksDS
private val remoteDS: BooksDS

init {
localDS = dsMap["local"] ?: throw RuntimeException("Unable to get localDS, check dependency graph")
remoteDS = dsMap["remote"] ?: throw RuntimeException("Unable to get remoteDS, check dependency graph")
}

fun addBook(book: Book): Boolean {
return localDS.addBook(book)
}
Expand Down
22 changes: 0 additions & 22 deletions src/main/kotlin/dev/rivu/bookstore/data/di/DataComponent.kt

This file was deleted.

19 changes: 19 additions & 0 deletions src/main/kotlin/dev/rivu/bookstore/data/di/DataModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package dev.rivu.bookstore.data.di

import dagger.Module
import dagger.Provides
import dev.rivu.bookstore.data.BooksDS
import dev.rivu.bookstore.data.BooksLocalDS
import dev.rivu.bookstore.data.BooksRemoteDS
import javax.inject.Named

@Module
class DataModule {
@Provides
@Named("localDS")
fun getLocalDS(): BooksDS = BooksLocalDS()

@Provides
@Named("remoteDS")
fun getRemoteDS(): BooksDS = BooksRemoteDS.getInstance()
}
11 changes: 5 additions & 6 deletions src/main/kotlin/dev/rivu/bookstore/di/AppComponent.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package dev.rivu.bookstore.di

import dagger.Component
import dev.rivu.bookstore.BookStoreApp
import dev.rivu.bookstore.data.di.DataComponent
import dev.rivu.bookstore.presentation.BooksViewModel
import me.tatarka.inject.annotations.Component
import dev.rivu.bookstore.data.di.DataModule

@BooksAppScope
@Component
abstract class AppComponent(@Component val dataComponent: DataComponent) {
abstract val app: BookStoreApp
@Component(modules = [DataModule::class])
abstract class AppComponent() {
abstract fun bookStoreApp(): BookStoreApp
}
2 changes: 1 addition & 1 deletion src/main/kotlin/dev/rivu/bookstore/di/BooksAppScope.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package dev.rivu.bookstore.di

import me.tatarka.inject.annotations.Scope
import javax.inject.Scope
import kotlin.annotation.AnnotationTarget.CLASS
import kotlin.annotation.AnnotationTarget.FUNCTION
import kotlin.annotation.AnnotationTarget.PROPERTY_GETTER
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,14 @@ package dev.rivu.bookstore.presentation
import dev.rivu.bookstore.data.Book
import dev.rivu.bookstore.data.BooksRepo
import dev.rivu.bookstore.di.BooksAppScope
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import me.tatarka.inject.annotations.Inject

@BooksAppScope
@Inject
class BooksViewModel(
class BooksViewModel @Inject constructor(
private val booksRepo: BooksRepo
) {
private val _booksState: MutableStateFlow<BookStoreStates> = MutableStateFlow(BookStoreStates.Options)
Expand Down