我想在服务方法中定义数据库调用,但是在Transaction
类的上下文中执行它们而不打开服务本身的连接,这样我就可以在同一个事务中包含多个服务调用
我正在寻找类似的东西,但无法弄明白。
class Transaction {
init { /** Grab connection **/ }
fun doSelect() { ... }
}
class UserService {
fun Transaction.getUser() {
return doSelect()
}
}
fun main (args: Array<String>) {
Transaction() {
UserService().getUser() // INVALID
...
}
}
有办法做到这一点吗?
我知道我可以将事务实例传递给服务,如下所示:
class UserService(tx: Transaction) {
fun getUser() {
with(tx) {
doSelect()
}
}
...
fun main (args: Array<String>) {
Transaction() {
UserService(this).getUser()
...
}
}
......但我希望有更优雅的模式。
答案 0 :(得分:0)
系统反过来工作,所以要解决问题,交换接收器:
fun main (args: Array<String>) {
UserService().apply {
Transaction().getUser()
}
}