2

ZIO中,我们为 Environment 提供了启动Traits

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

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

这个博客描述了整个场景。

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

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

在哪里service注入。

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

有没有替代方案?

4

1 回答 1

1

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

如果您可以将注入器创建RIO[Config, Injector]和注入包装在RIO[Injector, Service]其中可以满足您的需求

于 2019-12-17T18:10:18.473 回答