在 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
。
是否有替代方法?
答案 0 :(得分:1)
作为解决此问题的想法,您可以检查一下此概念。也许有时候我会写库,但是我觉得这足以让人产生想法。 https://gist.github.com/holinov/50fbf349fcb9f6e6c2b89ce319c20bba
如果您可以在RIO[Config, Injector]
中封装创建的注入器,并在RIO[Injector, Service]
中注入,则可以满足您的需求