android - 如何使用 Dagger @Inject 到 Kotlin Builder 类中
问题描述
我当前的 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 数据类的构建器
我希望@Inject 他们让我的代码“更干净”
我可以@Inject 到我的活动和存储库中,但看不到如何使用 Dagger 将它们注入到上述数据类中。
是否可以 @Inject 到 Kotlin 数据类中?
解决方案
我从未在数据类上尝试过这种语法,但它可能是个好方法:
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
当然,你的依赖图必须指定如何提供数据类的所有参数。
推荐阅读
- python - 熊猫一对一的行合并,保持左侧的结构?
- javascript - 如何在 html css js 创建的键盘中的符号和数字之间切换?
- html - 如何在使用 powerflow 时将 html 转换为错误最少的单词?
- java - 错误:缺少 JavaFX 运行时组件。构建 javafx 应用程序时
- mvvm - RXSwift 结合两个 observables 并调用 API
- python - 烧瓶多个实例相同的对象访问
- mysql - 如何在 SQL 的 case 语句中添加 2 个不同的列值?
- reactjs - React js TypeError:无法读取未定义的属性“参数”。我正在使用反应路由器 ^5.2
- plyr - 如何插入两个不同的平均列,保持 R 中的第一组排序?
- oracle - Oracle 和 HTTP - 全局设置 HTTP 连接超时的任何方式