ZIO:如何动态注入依赖项

时间:2019-12-16 19:40:27

标签: scala zio

ZIO 中,我们为环境提供了初始化特质

function onEdit(e) {
  var sh=e.range.getSheet();  
  if(sh.getName()=="PrepSheet" && e.range.columnStart==15 && e.value==0) {
    var tsh=e.source.getSheetByName("TopUp Required");
    var target=tsh.getRange(tsh.getLastRow() + 1,1);
    sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).copyTo(target);
  }
}

我想做的是从配置文件-模拟 Guice 模块中动态注入program.provide( new Console.Live with MyComponent {} )

Blog中描述了整个场景。

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

MyComponent

注入了program.provide( new Console.Live with Components.Live { def compsService: Components.Service[Console] = service } ) 的地方。

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

是否有替代方法?

1 个答案:

答案 0 :(得分:1)

作为解决此问题的想法,您可以检查一下此概念。也许有时候我会写库,但是我觉得这足以让人产生想法。 https://gist.github.com/holinov/50fbf349fcb9f6e6c2b89ce319c20bba

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