我被ZIO中许多不同的方式所迷惑,这些方式似乎是同一件事(至少在我看来是这样)。
特别是,像这样的东西:
val layer: RLayer[ServiceA with ServiceB, ServiceC] = ZLayer.scoped {
for {
a <- ZIO.service[ServiceA]
b <- ZIO.service[ServiceB]
} yield new ServiceCImpl(a, b)
}
字符串
vs
val layer2: RLayer[ServiceA with ServiceB, ServiceC] = ZLayer.fromZIO {
for {
a <- ZIO.service[ServiceA]
b <- ZIO.service[ServiceB]
} yield new ServiceCImpl(a, b)
}
型
这两个代码段做的是同一件事吗?如果不是,有什么区别?如果是,为什么有两个?什么时候你会使用一个而不是另一个?
1条答案
按热度按时间2guxujil1#
在你的例子中,他们也在做同样的事情。实际上,
ZLayer.fromFunction
还有第三种方法:字符串
这是最简单的。
那又有什么区别呢?
ZLayer.scoped
用于您正在创建的服务需要某些限定范围的资源(如打开一个文件并在“停止”服务时自动关闭该文件,或数据库连接)时ZLayer.fromZIO
,并且创建服务时表示为ZIO
ZLayer.fromFunction
另请参阅ZLayer reference documentation。