Kotlin:如何在事务类的上下文中运行服务方法?

时间:2016-03-15 03:28:42

标签: kotlin kotlin-extension

我想在服务方法中定义数据库调用,但是在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()
    ...
  }
}

......但我希望有更优雅的模式。

1 个答案:

答案 0 :(得分:0)

系统反过来工作,所以要解决问题,交换接收器:

fun main (args: Array<String>) {
    UserService().apply {
        Transaction().getUser() 
    }
}