Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 在接口方法中获取当前事务句柄_Kotlin_Jdbi_Jdbi3 Core - Fatal编程技术网

Kotlin 在接口方法中获取当前事务句柄

Kotlin 在接口方法中获取当前事务句柄,kotlin,jdbi,jdbi3-core,Kotlin,Jdbi,Jdbi3 Core,我试图在接口方法中访问当前的JDBI事务handle,目的是避免将handle作为参数传递给接口的方法,从而使接口没有任何实现细节。下面的示例演示了预期用例是什么 我有一个UserApplicationService管理正在使用的事务 class UserApplicationService(val jdbi: Jdbi, val userRepository: UserRepository) { fun changeUserName() { jdbi.useTrans

我试图在接口方法中访问当前的JDBI事务
handle
,目的是避免将
handle
作为参数传递给接口的方法,从而使接口没有任何实现细节。下面的示例演示了预期用例是什么

我有一个
UserApplicationService
管理正在使用的事务

class UserApplicationService(val jdbi: Jdbi, val userRepository: UserRepository) {

    fun changeUserName() {
        jdbi.useTransaction<Exception> {
            userRepository.updateName("peter pan")
        }
    }
}
我有一个接口的
PostgresUserRepository
实现

interface UserRepository {
    fun updateName(name: String)
}
class PostgresUserRepository: UserRepository {
    override fun updateName(name: String) {
        val handle: Handle = getHandle() // some method to get the handle of the transaction, this is what I need help solving
        handle.execute("...") // set new name of user using the handle
    }
}

对于如何解决此问题的任何建议,我们都将不胜感激。

在我看来,您可能希望向
PostgresUserRepository
的构造函数传递一些内容,以便稍后获得事务句柄。因为该对象是接口的实现细节,所以它可以了解这个特定的东西。这可能是您在创建时注入对象的内容。另一个选项是某种全局变量,比如能够提供句柄的特定类的单例对象。在您的情况下,最好的功能就是如何定义应用程序的其余部分。@Steve不确定我会将什么传递到
PostgresUserRepository
的构造函数中,除了
Jdbi
对象,以防其中有某种方法来获取当前事务。至于单身人士;您有这样一个实现的例子吗?Singleton模式是一个带有静态“get()”方法的类,该方法返回该类的实例。第一次调用它时,它分配对象的实例,保存对该对象的引用,并返回引用。在后续调用中,它通过该引用返回现有对象。由于您可以在代码中的任何位置调用静态类方法,而无需上下文,因此它基本上是全局的,即:
MySingletonClass msc=MySingletonClass.get()确定您想要访问的内容,以及何时以及如何访问,似乎是问题的关键。如何获得这种访问权似乎是次要的。所以我建议你试着回答第一个问题,然后在这里提出。或者也许有人会读到这篇文章并提供答案。