5

我正在尝试使用蛋糕模式进行依赖注入,如下所示:

trait FooComponent {
  val foo: Foo

  trait Foo;
}

trait AlsoNeedsFoo {
  this: FooComponent =>
}

trait RequiresFoo {
  this: FooComponent =>

  val a = new AlsoNeedsFoo with FooComponent{
    val foo: this.type#Foo = RequiresFoo.this.foo
  }

}

但编译器抱怨RequiresFoo.this.type#Foo不符合预期的类型this.type#Foo

所以问题是:是否可以在AlsoNeedsFoo内部创建一个对象RequiresFoo以便依赖注入正常工作?

4

1 回答 1

7

使用蛋糕模式,您不应该实例化其他组件,而是扩展它们。

在您的情况下,如果您需要功能,AlsoNeedsFoo您应该编写如下内容:

this: FooComponent with AlsoNeedsFoo with ... =>

并将所有内容放在顶层:

val app = MyImpl extends FooComponent with AlsoNeedsFoo with RequiresFoo with ...
于 2014-02-25T03:02:06.383 回答