Scala Language
Beroende på injektion
Sök…
Tårtmönster med inre implementeringsklass.
//create a component that will be injected
trait TimeUtil {
lazy val timeUtil = new TimeUtilImpl()
class TimeUtilImpl{
def now() = new DateTime()
}
}
//main controller is depended on time util
trait MainController {
_ : TimeUtil => //inject time util into main controller
lazy val mainController = new MainControllerImpl()
class MainControllerImpl {
def printCurrentTime() = println(timeUtil.now()) //timeUtil is injected from TimeUtil trait
}
}
object MainApp extends App {
object app extends MainController
with TimeUtil //wire all components
app.mainController.printCurrentTime()
}
I exemplet ovan demonstrerade jag hur man injicerar TimeUtil i MainController.
Den viktigaste syntaxen är självanteckningen ( _: TimeUtil =>
) som är att injicera TimeUtil
i MainController
. I ett annat ord, MainController
beror på TimeUtil
.
Jag använder inre klass (t.ex. TimeUtilImpl
) i varje komponent eftersom det enligt min mening är lättare att testa eftersom vi kan håna den inre klassen. Och det är också lättare att spåra var metoden kallas från när projektet blir mer komplex.
Slutligen kopplar jag samman alla komponenter. Om du känner till Guice, motsvarar detta Binding
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow