Транзитивный DI с использованием шаблона торта

Я пытаюсь сделать инъекцию зависимостей, используя шаблон торт так:

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 так что внедрение зависимостей работает правильно?

1 ответ

Решение

С шаблоном торта вы не должны создавать экземпляры других компонентов, но расширяете их.

В вашем случае вы, если вам нужна функциональность AlsoNeedsFoo Вы должны написать что-то вроде этого:

this: FooComponent with AlsoNeedsFoo with ... =>

И положить все вместе на высшем уровне:

val app = MyImpl extends FooComponent with AlsoNeedsFoo with RequiresFoo with ...
Другие вопросы по тегам