Scala Language
Abhängigkeitsspritze
Suche…
Kuchenmuster mit innerer Umsetzungsklasse.
//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()
}
Im obigen Beispiel habe ich gezeigt, wie TimeUtil in den MainController injiziert wird.
Die wichtigste Syntax ist die Selbstanmerkung ( _: TimeUtil =>
), die TimeUtil
in den MainController
injizieren MainController
. Mit anderen Worten, MainController
hängt von TimeUtil
.
Ich verwende in jeder Komponente eine innere Klasse (z. B. TimeUtilImpl
), da dies meiner Meinung nach einfacher ist, da wir die innere Klasse nachahmen können. Und es ist auch einfacher für die Nachverfolgung, wo die Methode aufgerufen wird, wenn das Projekt komplexer wird.
Zum Schluss verdrahle ich alle Komponenten miteinander. Wenn Sie mit Guice vertraut sind, entspricht dies der Binding
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow