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