如何使用 ZIO(具有持久层)创建具有 "legacy" 界面的小型库
How to create a small library with a "legacy" interface using ZIO (having persistent layers)
我们想创建一个具有未来界面的“遗留”库:
trait LegacyClient {
def aMethod(param: Param): Future[Result]
def aSecondMethod(number: Int): Future[String]
}
我们想要创建一个使用 ZIO 但公开“遗留”接口的实现。做的问题
class ZIOBackedLegacyClient extends LegacyClient {
def aMethod(param: Param): Future[Result] = runtime.unsafeRunToFuture(myImplementedZio)
def aSecondMethod(number: Int): Future[String] = runtime.unsafeRunToFuture(mySecondImplementedZio)
}
该实现的问题是每次都从头开始构建层,而我们希望层在两种方法之间共享并具有所属的生命周期 class。
你有什么想法吗?
我们也曾尝试构建一个 returns LegacyClient 的 ZIO,但没有成功,因为层未共享。
感谢您的帮助!
您必须构建自定义运行时:
private val runtime: Runtime.Managed[ZEnv with AppEnv] = Runtime.unsafeFromLayer(finalLayer)
然后在您的 def 方法中使用:
runtime.unsafeRunToFuture(MyZIOModule.zioMethod(param))
我们想创建一个具有未来界面的“遗留”库:
trait LegacyClient {
def aMethod(param: Param): Future[Result]
def aSecondMethod(number: Int): Future[String]
}
我们想要创建一个使用 ZIO 但公开“遗留”接口的实现。做的问题
class ZIOBackedLegacyClient extends LegacyClient {
def aMethod(param: Param): Future[Result] = runtime.unsafeRunToFuture(myImplementedZio)
def aSecondMethod(number: Int): Future[String] = runtime.unsafeRunToFuture(mySecondImplementedZio)
}
该实现的问题是每次都从头开始构建层,而我们希望层在两种方法之间共享并具有所属的生命周期 class。
你有什么想法吗?
我们也曾尝试构建一个 returns LegacyClient 的 ZIO,但没有成功,因为层未共享。
感谢您的帮助!
您必须构建自定义运行时:
private val runtime: Runtime.Managed[ZEnv with AppEnv] = Runtime.unsafeFromLayer(finalLayer)
然后在您的 def 方法中使用:
runtime.unsafeRunToFuture(MyZIOModule.zioMethod(param))