Транзитивный 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 ...