【问题标题】:ZIO: How to dynamic inject a dependencyZIO:如何动态注入依赖项
【发布时间】:2019-12-18 02:10:18
【问题描述】:

ZIO中,我们为环境提供了初始Traits

program.provide(
  new Console.Live with MyComponent {}
)

我想做的是从配置文件动态注入MyComponent - 模拟Guice 模块。

这个Blog描述了整个场景。

我可以注入一个依赖项,然后像这样创建环境:

program.provide(
    new Console.Live with Components.Live {
      def compsService: Components.Service[Console] = service
    }
  )

service 的注入位置。

这可行,但有一个很大的缺点:我们必须为所有服务实现定义环境。因此,例如如果其中一个想要使用Random,这是不可能的,因为我们只提供Console

有没有替代方案?

【问题讨论】:

  • 跟ZIO有什么关系?

标签: scala zio


【解决方案1】:

作为解决此问题的一个想法,您可以检查此概念。也许有时我会写图书馆,但我觉得这足以得到想法。 https://gist.github.com/holinov/50fbf349fcb9f6e6c2b89ce319c20bba

如果您可以在 RIO[Config, Injector] 中封装注入器的创建并在 RIO[Injector, Service] 中封装注入器,那么它可以满足您的需求

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2011-11-22
    • 2017-08-06
    • 1970-01-01
    相关资源
    最近更新 更多