You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.3 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. import javax.inject.{Inject, Provider, Singleton}
  2. import com.example.user.UserDAO
  3. import com.example.user.slick.SlickUserDAO
  4. import com.google.inject.AbstractModule
  5. import com.typesafe.config.Config
  6. import play.api.inject.ApplicationLifecycle
  7. import play.api.{Configuration, Environment}
  8. import slick.jdbc.JdbcBackend.Database
  9. import scala.concurrent.Future
  10. import com.example.user.CarDAO
  11. import com.example.Car.slick.SlickCarDAO
  12. import com.example.services.LibraryService
  13. import com.example.user.slick.services.SlickLibraryService
  14. import com.example.services.TaskLibraryService
  15. import com.example.user.slick.services.TaskSlickLibraryService
  16. import monix.execution.Scheduler
  17. import util.{Schedulers, SchedulersImpl}
  18. import slick.jdbc.JdbcProfile
  19. /**
  20. * This module handles the bindings for the API to the Slick implementation.
  21. *
  22. * https://www.playframework.com/documentation/latest/ScalaDependencyInjection#Programmatic-bindings
  23. */
  24. class Module(environment: Environment, configuration: Configuration)
  25. extends AbstractModule {
  26. override def configure(): Unit = {
  27. bind(classOf[Database]).toProvider(classOf[DatabaseProvider])
  28. bind(classOf[JdbcProfile]).toProvider(classOf[JdbcProfileProvider])
  29. bind(classOf[UserDAO]).to(classOf[SlickUserDAO])
  30. bind(classOf[CarDAO]).to(classOf[SlickCarDAO])
  31. bind(classOf[LibraryService]).to(classOf[SlickLibraryService])
  32. bind(classOf[TaskLibraryService]).to(classOf[TaskSlickLibraryService])
  33. bind(classOf[Scheduler]).toProvider(classOf[SchedulerProvider])
  34. bind(classOf[Schedulers]).toProvider(classOf[AppSchedulersProvider])
  35. bind(classOf[DBCloseHook]).asEagerSingleton()
  36. }
  37. }
  38. @Singleton
  39. class DatabaseProvider @Inject() (config: Config) extends Provider[Database] {
  40. lazy val get = Database.forConfig("myapp.database", config)
  41. }
  42. @Singleton
  43. class SchedulerProvider() extends Provider[Scheduler] {
  44. lazy val get = Scheduler.io()
  45. }
  46. @Singleton
  47. class AppSchedulersProvider() extends Provider[Schedulers] {
  48. lazy val get =
  49. new SchedulersImpl(
  50. dbScheduler = Scheduler.io(),
  51. cpuScheduler = Scheduler.global
  52. )
  53. }
  54. @Singleton
  55. class JdbcProfileProvider() extends Provider[JdbcProfile] {
  56. lazy val get: JdbcProfile = _root_.slick.jdbc.H2Profile
  57. }
  58. @Singleton
  59. class DBCloseHook @Inject() (db: Database, lifecycle: ApplicationLifecycle) {
  60. lifecycle.addStopHook { () => Future.successful(db.close()) }
  61. }