お久しぶりです。 Scala でDIっぽいことをやる方法と申しますと、こういったアプローチがあるのですが、 これだと、inject用のTraitを山のように定義しないといけなくて、煩雑な気がしたので、自分で簡単なDIの仕組みを作ってみました。 こんな感じです↓ 1 import scala.collection.immutable.Map 2 3 trait Key[+T] 4 5 class Component(entries:Map[Key[Any],()=>Any]) { 6 7 def define[T](key:Key[T], instance: => T) = 8 new Component(entries + (key -> (()=>instance))) 9 10 def apply[T](key:Key[T]):T = 11