2014-02-24 3 views
5

를 사용하여 :트랜 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 안에 만들면 종속성 삽입이 제대로 작동합니까?

답변

7

케이크 패턴을 사용하면 다른 구성 요소를 인스턴스화하지 말고 확장합니다. 당신이 AlsoNeedsFoo의 기능이 필요한 경우 경우

당신은 다음과 같이 작성해야합니다 :

this: FooComponent with AlsoNeedsFoo with ... => 

을 그리고 최상위에 모두 함께 넣어 :

val app = MyImpl extends FooComponent with AlsoNeedsFoo with RequiresFoo with ... 
+4

하지만 그게가 불가능 것을 의미한다 'RequiresFoo' 안에'AlsoNeedsFoo'의 다중 인스턴스를 생성하십시오. 그 맞습니까? – dratewka

+3

예. 명시된 구성 요소와 함께 케이크 패턴이 제대로 작동하지 않습니다. – 1esha