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

我想在服务方法中定义数据库调用,但要在Transaction类的上下文中执行它们,而不在服务本身中打开连接,以便可以在同一个事务中包含多个服务调用。

我正在寻找这样的东西,但不能完全弄清楚。

 class Transaction { init { /** Grab connection **/ } fun doSelect() { ... } } class UserService { fun Transaction.getUser() { return doSelect() } } fun main (args: Array) { Transaction() { UserService().getUser() // INVALID ... } } 

有没有办法做到这一点?

我知道我可以像这样传递一个事务实例给服务:

 class UserService(tx: Transaction) { fun getUser() { with(tx) { doSelect() } } ... fun main (args: Array) { Transaction() { UserService(this).getUser() ... } } 

…但我希望有一个更优雅的模式。

该系统反过来,所以要解决这个问题,交换接收器:

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