2017-02-07 94 views
1

考慮以下情形斯卡拉:依賴注入

abstract class Animal {/***/} 
class Dog(s : String) extends Animal {/***/} 
class Cat(s :String) extends Animal {/***/} 

class C() { 
    val animal: Animal = new Dog(name) 
    private def name = "name for animal that C knows how to calculate" 
} 

我怎樣才能提供一個Animal實例C,而不是爲C誰創造它的人?

這是可以做到像

class B(f : String => Animal) { 
    val animal: Animal = f(name) 
    private def name = "name for animal that B knows how to calculate" 
} 

,然後讓我

val bWithDog = new B((name: String) => new Dog(name)) 
val bWithCat = new B((name: String) => new Cat(name)) 

這是我的目標 但是,這是一個乾淨的解決方案? 或者向C提供動物是沒有意義的,因爲只有C知道如何計算它的名字?

回答

0
class C(val animal: Animal) { 
private def name = "name for animal that C knows how to calculate" 
} 
new C(new Dog("fiddo")) 

構造函數參數有什麼問題?

+0

我不知道如何構建C以外的動物,因爲只有C知道如何設置它的名字 – Bruno

+0

哦,我明白你的意思了,你沒有在問題中提到。 – pedrofurla