根据可用的文档,这项任务似乎很简单,但是我已经为此苦苦挣扎了几天,仍然无法使其适用于简单的模块间依赖...
这是一个简化的示例:
trait Bla {
def m: String
}
class BlaImpl(implicit val bindingModule: BindingModule) extends Bla with Injectable {
val s = inject[String]('bla)
def m = "got " + s
}
object Program extends App with Injectable {
implicit val bindingModule =
new NewBindingModule({ implicit module ⇒ module.bind[Bla] toSingle { new BlaImpl } }) ~
new NewBindingModule(_.bind[String] idBy 'bla toSingle "bla!")
val bla = inject[Bla]
assert(bla.m == "got bla!")
}
尝试构建 BlaImpl 实例时,运行此代码失败并出现以下错误:
org.scala_tools.subcut.inject.BindingException: No binding for key BindingKey(java.lang.String,Some(bla))
调试显示传递给 BlaImpl 构造函数的绑定模块在其绑定中不包含 'bla String,并且 Program.bindingModule.bindings 具有所有绑定(包括所需的字符串)。
我见过其他类似的问题,但它只指组合而不是跨越模块边界的依赖项。
我究竟做错了什么?