Как вводить в классы Kotlin Builder с помощью Dagger - PullRequest
0 голосов
/ 01 мая 2019

В моем текущем проекте Android используется ряд классов данных Kotlin, в которых для их построения используются конструкторы.

Я хочу внедрить экземпляр в класс данных Kotlin.

Каждый из моих классов данныхимеют эту базовую структуру

data class MyDataKlass(    val onError: Consumer<in Throwable>,
                           val onComplete: Action,
                           val dbController: DatabaseController,
                           val lnController: ILoginNetworkController) : BaseSO() {

    @SuppressLint("CheckResult")
    fun execute() {

    }

}

fun myFunction(block: MyDataKlassBuilder.() -> Unit): MyDataKlass = MyDataKlassBuilder().apply(block).build()

class MyDataKlassBuilder {

    var onError: Consumer<in Throwable> = Consumer { }
    var onComplete: Action = Action { }
    lateinit var dbController: DatabaseController
    lateinit var lnController: ILoginNetworkController

    fun build(): MyDataKlass = MyDataKlass(onError, onComplete, dbController, lnController)
}

Я использую эти классы следующим образом: -

 val myFunction = myFunction {
                onComplete = Action { syncWorkerResult = Result.success() }
                dbController = databaseController
                lnController = loginNetwork
                onError = Consumer {
                    syncWorkerResult = Result.failure()
                }
            }

 myFunction.execute()

В настоящее время я передаю в свою базу данных (DatabaseController) и сетевые (ILoginNetworkController) контроллерыв конструкторы классов Kotlin Data

Я хочу @Inject, чтобы сделать мой код "чище"

Я могу @Inject внедрять как в свою деятельность, так и в репозитории, но не могу понять, как использовать Daggerвнедрить их в вышеупомянутые классы данных.

Возможно ли @Inject в классы данных Kotlin?

1 Ответ

1 голос
/ 01 мая 2019

Я никогда не пробовал этот синтаксис для класса данных, но он может быть хорошим:

data class MyDataKlass @Inject constructor(
    val onError: Consumer<in Throwable>,
    val onComplete: Action,
    val dbController: DatabaseController,
    val lnController: ILoginNetworkController
) : BaseSO() {
    @SuppressLint("CheckResult")
    fun execute() {
    }
}

и в вашей деятельности:

lateinit var dataKlass: MyDataKlass @Inject set

Конечно, ваш график зависимостей должен будет указывать, как предоставить все параметры класса данных.

...