是scala';有参数化组件的蛋糕模式可能吗?

是scala';有参数化组件的蛋糕模式可能吗?,scala,dependency-injection,cake-pattern,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]

只要您只对每个类型化组件的唯一组件感兴趣,参数化组件就可以很好地与蛋糕模式配合使用,例如:

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的类型系统不允许我将一个组件扩展两次。这种情况下的常见做法是什么?

我认为组件本身不需要参数化。因此,松开类型参数并将其更改为

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的实例,那么如果他的示例不仅是说明性的,而且缺少了与他想要实现的目标相关的部分,那么这确实是更好的解决方案。谢谢您的回答。这确实是我遇到的最好的一次。这方面的问题是,注入B[T](a:a[T])的B组件需要使用类型化参数调用B上的构造函数。(通常
val bInt=new B(aInt)
),在这种情况下会降低蛋糕图案的值