几个星期后,我在Scala(2.9.1)项目中使用Sindi 0.5(IoC Container)。 99%很好,但我经常需要用户输入的新类实例。在Sindi User Guide中,所有构造函数参数都作为静态值注入,而我没有找到Sindi的其他教程。所以我测试了以下示例代码:
import sindi._
trait Digits {
val dig1: Int
val dig2: Double
}
class MyDigits(override val dig1: Int, override val dig2: Double) extends Digits {
override def toString = super.toString + "\ndigit 1: " + dig1 + "\ndigit 2: " + dig2
}
//DigitModule ist Sindi specific.
final class DigitModule(override val ctx: Context) extends Module {
override val bindings = Bindings(
bind[Digits] to provider(new MyDigits(digit1, digit2))
)
private var digit1: Int = _
private var digit2: Double = _
def digits(d1: Int, d2: Double) : Digits = {
digit1 = d1
digit2 = d2
inject[Digits]
}
}
这个DigitModule有效。方法digits()可以使用来自用户的值从另一个Context(也是特定于Sindi)调用。但这是最好的解决方案吗?该方法将参数值写入私有变量,然后inject [Digits]命令创建/注入具有私有变量值的新MyDigit类。我认为这种间接是一种糟糕的方式,我希望有一种解决方案,如注入[数字](Int,Double)或类似的东西。没有间接的解决方案不会出错。
谢谢
奥拉夫