I'm trying to do dependency injection using the cake pattern like so:
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
}
}
but the compiler complains that the RequiresFoo.this.type#Foo
doesn't conform to the expected type this.type#Foo
.
So the question: is it possible to create a AlsoNeedsFoo
object inside RequiresFoo
so that dependency injection works properly?
With cake pattern you should not instantiate other components, but extends them.
In your case you if you need functionality of AlsoNeedsFoo
you should write something like this:
this: FooComponent with AlsoNeedsFoo with ... =>
And put all together on top level:
val app = MyImpl extends FooComponent with AlsoNeedsFoo with RequiresFoo with ...