2017-02-07 13 views
1

Учитывая следующий сценарийScala: Dependency Injection

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 тот, кто его создает?

можно сделать что-то вроде

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)) 

что моя цель Но является ли это чистое решение? Или не имеет смысла предоставлять Animal для 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