数週間以来、Scala (2.9.1) プロジェクトで Sindi 0.5 (IoC Container) を使用しています。99% は問題ありませんが、ユーザー入力を含むクラスの新しいインスタンスが必要になることがよくあります。Sindi ユーザー ガイドでは、すべてのコンストラクター パラメーターが静的な値として挿入されており、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() は、ユーザーからの値を使用して別のコンテキスト (これも Sindi 固有) から呼び出すことができます。しかし、これは最善の解決策ですか?メソッドはパラメーター値をプライベート変数に書き込み、次に inject[Digits] コマンドがプライベート変数の値を使用して新しい MyDigit クラスを作成/挿入します。私は、この間接化は悪い方法だと思うので、inject[Digits](Int, Double) などのような解決策を期待しています。間接的な解決策は失敗しません。
ありがとうございました
オラフ