Scala Language
Wstrzykiwanie zależności
Szukaj…
Wzór ciasta z wewnętrzną klasą implementacji.
//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()
}
W powyższym przykładzie pokazałem, jak wstrzyknąć TimeUtil do MainController.
Najważniejszą składni samo-przyp ( _: TimeUtil =>
), które jest do wstrzykiwania TimeUtil
do MainController
. W innym słowem, MainController
zależy TimeUtil
.
Używam klasy wewnętrznej (np. TimeUtilImpl
) w każdym elemencie, ponieważ moim zdaniem łatwiej jest testować, ponieważ możemy kpić z klasy wewnętrznej. Łatwiej jest również śledzić, gdzie wywoływana jest metoda, gdy projekt staje się bardziej złożony.
Na koniec łączę wszystkie elementy razem. Jeśli znasz Guice, jest to równoważne Binding
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow