class PrintService {
def print = println("I'm a real service")
}
trait Services {
val printService = new PrintService()
// put your other services here
}
//for example, a Play controller
class App (deps: Services) /*extends Controller*/ {
import deps._
def run = printService.print
}
// In Scala singletons (objects) can be parameterized, so no need for DI framework or container
object DependenciesModule extends Services //global object for your app or controller
object ServicesApp extends App(DependenciesModule)
ServicesApp.run //services
//testing
val printServiceMock = new PrintService { //or use Mockito
override def print = println("I'm a mock")
}
object MockServices extends Services {
override val printService = printServiceMock
}
object FakeServicesApp extends App(MockServices)
FakeServicesApp.run // "I'm a mock"