1

目前我正在使用 guice 在控制器内连接我的 UserService,例如:

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

我的用户服务看起来像:

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

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

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

4

1 回答 1

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包中,以使路由最方便。

于 2014-05-17T11:04:31.320 回答