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
Могу ли я сделать конструктор по умолчанию для класса, созданного из файла Kotlin private? Класс Kotlin на eclipse действует странно, каждый раз, когда я запускаю программу, я получаю вывод из другого файла Не удалось разрешить хост pokeAPI Проблема с Kotlin после Android Studio была обновлена ​​до 0,6 Как добавляются дополнительные свойства градиента в DSL Kotlin? Кинжал пропускает генерацию Factory для модуля Google Services при использовании kapt Как использовать библиотеку многократного использования в kotlin, с андроидом и javascript? Что такое @InlineOnly аннотация? Как опустить параметр конструктора со значением по умолчанию при вызове Kotlin в Java? Выполнение не выполнено для задачи ': app: compileDebugKotlin'. > Внутренняя ошибка компилятора. Подробнее см. Журнал Как издеваться над статическими методами в Котлине? Kotlin Ошибка: не удалось найти org.jetbrains.kotlin: kotlin-stdlib-jre7: 1.0.7 Android. установить textSize, чтобы высота соответствовала проценту его высоты макета родителя – возможно? Как преобразовать символ в значение ascii на языке kotlin mockito InjectMocks не работает?