玩2.4和Guice模块,我怎样才能重用我现在拥有的东西?

时间:2016-01-31 03:12:08

标签: scala playframework guice

我正在升级到Playframework 2.4,我现在有这个:

Global.scala

object Global extends GlobalSettings with LazzyLogging {
  private lazy val injector = {
    Guice.createInjector(new ServiceModule)
  }
}

override def getControllerInstance[A](controllerClass: Class[A]): A = {
    injector.getInstance(controllerClass)
  }

ServiesModule.scala

class ServicesModule extends ScalaModule {
  def configure() {
    bind[userService].to[UserServiceImpl]
    ...
    .
  }
}

我没有收到编译错误:

Global.scala:28: method getControllerInstance overrides nothing
[error]   override def getControllerInstance[A](controllerClass: Class[A]): A = {

我的路线文件为依赖注入路线提供了此信息:

GET /abc         @controller.HomeController.index

我需要更改什么,希望我可以重新使用ServicesModule,但它正在使用sse-guice library

1 个答案:

答案 0 :(得分:3)

对于您在问题中显示的内容,您必须更改少量内容:

  1. 开始使用injected routes,以便您可以在控制器中安装DI。只需将以下行添加到build.sbt文件中:

    routesGenerator:= InjectedRoutesGenerator

  2. 这还要求您更改routes文件以从路由声明中删除@。所以,你的路线将是:

    GET /abc         controller.HomeController.index
    
    1. 使用ServiceModule配置为play.modules.enabled提供custom binding。为此,只需将以下行添加到application.conf

      play.modules.enabled + =“com.acme.services.ServiceModule”

    2. 您可能需要将ServiceModule更改为AbstractModule而不是ScalaModule

      import com.google.inject.AbstractModule
      
      class ServicesModule extends AbstractModule {
        def configure() {
          bind[userService].to[UserServiceImpl]
        }
      }
      
      1. Remove your GlobalSettings赞成新的做事方式。
      2. 另外,我建议您阅读Migration Guide。它包含有关如何调整代码的信息。