Scala 使用蛋糕模式的依赖项注入与在构造函数中传递参数

Scala 使用蛋糕模式的依赖项注入与在构造函数中传递参数,scala,dependency-injection,constructor,cake-pattern,Scala,Dependency Injection,Constructor,Cake Pattern,读完博客后,我不明白: 使用自类型注释与为依赖项注入指定构造函数参数之间有什么区别 换句话说,这种风格有什么不同: object Main { def main(args: Array[String]) { val barWithFoo = new BarUsingFooAble with MyFooAble with BazAble println(barWithFoo.bar()) } } 这是: object Main { def main(args: Arr

读完博客后,我不明白:

使用自类型注释与为依赖项注入指定构造函数参数之间有什么区别

换句话说,这种风格有什么不同:

object Main {
  def main(args: Array[String]) {
    val barWithFoo = new BarUsingFooAble with MyFooAble with BazAble
    println(barWithFoo.bar())
  }
}
这是:

object Main {
  def main(args: Array[String]) {
    val barWithFooAndBaz = new BarUsingFooAble(new FooAble with BazAble)
    println(barWithFooAndBaz.bar())
  }
}
这(第三种选择):

?

有(语法以外的)吗?(必须有,否则自类型注释将不存在)

编辑:

似乎是一个相关的问题,虽然它并没有回答这个问题


也是相关的,所以这两种风格基本上没有区别?

文章作者自言自语:它比使用类型注释好/坏吗?我会说这是一个风格和偏好的问题,找不到任何更深层次的区别。这是一个味道的问题,在Scala中通常有不止一种方法来做某事。好吧,如果没有更深层次的区别,那么为什么蛋糕的图案如此重要呢?为什么在Scala编译器中使用它?我想肯定有更深层次的区别,我只是还不明白。因为它很有用,而且是声明性的。我假设Scala编译器的作者不想将依赖项注入库作为编译器依赖项的一部分引入,如果您考虑一下,这是有意义的。然后,他们必须自己注入实例,使用
new
等等,这违背了构造函数参数的目的。难道我们不应该将构造函数参数和with之间的区别视为with的
is-a
和构造函数参数的
has-a
关系吗?
object Main {
  def main(args: Array[String]) {
    val barWithFoo = new BarUsingFooAble with FooAbleComponent with BazAbleComponent {
      val bazAble = new BazAble() //or any other implementation
      val fooAble = new FooAble() //or any other implementation
    }
    println(barWithFoo.bar())
  }
}