目前我正在使用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>
答案 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
包中,以便最方便地进行路由。