Advertisement
Guest User

Untitled

a guest
Nov 17th, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.27 KB | None | 0 0
  1. trait Config {
  2.   val dbType: String
  3.   val serviceEndpoint: String
  4. }
  5.  
  6. class ProdConfig extends Config {
  7.   val dbType = "Production"
  8.   val serviceEndpoint = "linkedin.com"
  9. }
  10.  
  11. trait Controller
  12. trait Service
  13.  
  14. class Controller1(serviceEndpoint: String, service1: Service1)
  15.   extends Controller {
  16.   println(serviceEndpoint)
  17. }
  18.  
  19. class Controller2(serviceEndpoint: String, service1: Service1, service2: Service2)
  20.   extends Controller {
  21.   println(serviceEndpoint)
  22. }
  23.  
  24. class Service1(dbType: String) extends Service {
  25.   println(dbType)
  26. }
  27.  
  28. class Service2(dbType: String) extends Service {
  29.   println(dbType)
  30. }
  31.  
  32. def service1 = Reader((c: Config) => new Service1(c.dbType))
  33. def service2 = Reader((c: Config) => new Service2(c.dbType))
  34.  
  35. def controller1(s: Service1) = Reader[Config, Controller1] {
  36.   c => new Controller1(c.serviceEndpoint, s)
  37. }
  38.  
  39. def controller2(s1: Service1, s2: Service2) = Reader[Config, Controller2] {
  40.   c => new Controller2(c.serviceEndpoint, s1, s2)
  41. }
  42.  
  43. println("Faking a context.register call")
  44. val cfg = new ProdConfig
  45.  
  46. val controllers = Reader[Config, (Controller1, Controller2)] {
  47.   c => for {
  48.     s1 <- service1
  49.     s2 <- service2
  50.     c1 <- controller1(s1)
  51.     c2 <- controller2(s1,s2)
  52.   } yield(c1, c2)
  53. }
  54.  
  55. println(controllers.run(cfg))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement