Scala和Sindi:有没有更好的方法来获得用户输入的新课程?

时间:2012-09-27 17:18:11

标签: scala ioc-container

几个星期后,我在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)或类似的东西。没有间接的解决方案不会出错。

谢谢

奥拉夫

0 个答案:

没有答案