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() } } 
Intereting Posts
Как преобразовать Int в строку в Kotlin Что означает предупреждение «Использовать свойства из пакетов вариантов сборки»? Google Espresso: удалять данные пользователя по каждому тесту Android показывает, казалось бы, безобидное предупреждение при воспроизведении звука? Kotlin Android начинает новую деятельность Список данных не отображается в представлении Recycler в основном действии в приложении Android, используя kotlin для разработки. Экспериментальная реализация с сохранением пространства в Котлине (ошибка Gradle) Kotlin: видимый делегат свойства nullable Spring REST, Kotin и примитивные параметры по умолчанию приводят к ошибке Плагин с id `kotlin` не найден Ошибка при создании банки проекта IntelliJ, содержащего смешанный Groovy, Kotlin Неудачные тесты котлинских модулей после плагина 3.0 Прочитайте CSV-строку в Kotlin Kotlin coroutine не ждет, чтобы это было сделано Почему мы не можем отметить видимость класса как «защищенного» в котлин?