Kotlin: Как запустить методы обслуживания в контексте класса транзакций?

Я хотел бы определить вызовы базы данных в методах службы, но их выполнить в контексте класса 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() ... } } 

… но я надеюсь на более элегантный узор.

Система работает наоборот, поэтому, чтобы исправить проблему, замените приемники:

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