scala的蛋糕模式是否可以通过参数化组件实现?

时间:2012-11-20 16:13:26

标签: scala dependency-injection cake-pattern

参数化组件与蛋糕模式配合良好,只要您只对每个类型组件的唯一组件感兴趣,例如:

trait AComponent[T] {
  val a:A[T]

  class A[T](implicit mf:Manifest[T]) {
    println(mf)
  }
}

class App extends AComponent[Int] {
  val a = new A[Int]()
}

new App

现在我的应用程序要求我注入A [Int]和A [String],显然scala的类型系统不允许我两次扩展AComponent。这种情况下的常见做法是什么?

1 个答案:

答案 0 :(得分:1)

我认为AComponent本身不需要参数化。松散类型参数并将其更改为

trait AComponent {
    val aInt: A[Int]
    val aStr: A[String]
    class A[T](implicit mf:Manifest[T]) {
        println(mf)
    }
} 

class App extends AComponent {
    val aInt = new A[Int]()
    val aStr = new A[String]()
}

如果您希望能够为Int和String

提供实例