如何使用play中的蛋糕模式设置我的UserService?

时间:2014-05-15 20:49:00

标签: scala playframework cake-pattern

目前我正在使用guice将我的UserService连接到控制器中,如:

@Singleton
class UserController @Inject()(userService: UserService) extends Controller {
  def show(userId: Int) {
      val user = userService.get(userId)
      Ok("hello " + user.name)
  }
}

我的UserService看起来像:

abstract class UserService {
  def get(userId: Int): User
}

class UserServiceImpl @Inject()(val userDao: UserDao) extends UserService {
  def get(userId: Int): User = {
    // ....
  }
}

如果我想将guice作为依赖项并使用蛋糕模式,那么代码会是什么样子以及如何将其集成到Play中以便我可以在我的控制器中使用此服务? < / p>

1 个答案:

答案 0 :(得分:0)

这是一个包名称的建议,可以让您了解如何组织所有这些。

 package controllers.users

 trait UserController extends Controller {
     this: UserService =>

     def show(userId: Int) = {
         val user = this.get(userId)
         Ok("hello "  + user.name)
     }
 }

 package services.users

 trait UserService {
     def get(userId: Int): User
 }

 package services.users.impl

 trait UserServiceImpl extends UserService {
     def get(userId: Int) = { /*implementation*/ }
 }

 package controllers

 object UserController extends UserController with UserServiceImpl

您可以将您的服务和控制器trait放在项目中的任何位置。您应该将控制器object直接放在controllers包中,以便最方便地进行路由。