Scala Language
Iniezione di dipendenza
Ricerca…
Cake Pattern con classe di implementazione interna.
//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()
}
Nell'esempio sopra, ho dimostrato come iniettare TimeUtil in MainController.
La sintassi più importante è l'auto-annotazione ( _: TimeUtil => ) che consiste nell'iniettare TimeUtil in MainController . In altre parole, MainController dipende da TimeUtil .
Uso la classe interiore (ad es. TimeUtilImpl ) in ogni componente perché, a mio parere, è più facile per i test in quanto possiamo TimeUtilImpl in giro la classe interiore. Ed è anche più facile tracciare da dove viene chiamato il metodo quando il progetto diventa più complesso.
Infine, collego tutti i componenti. Se hai familiarità con Guice, questo è equivalente a Binding
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow