我正在升级到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。
答案 0 :(得分:3)
对于您在问题中显示的内容,您必须更改少量内容:
开始使用injected routes,以便您可以在控制器中安装DI。只需将以下行添加到build.sbt
文件中:
routesGenerator:= InjectedRoutesGenerator
这还要求您更改routes
文件以从路由声明中删除@
。所以,你的路线将是:
GET /abc controller.HomeController.index
使用ServiceModule
配置为play.modules.enabled
提供custom binding。为此,只需将以下行添加到application.conf
:
play.modules.enabled + =“com.acme.services.ServiceModule”
您可能需要将ServiceModule
更改为AbstractModule
而不是ScalaModule
:
import com.google.inject.AbstractModule
class ServicesModule extends AbstractModule {
def configure() {
bind[userService].to[UserServiceImpl]
}
}
GlobalSettings
赞成新的做事方式。另外,我建议您阅读Migration Guide。它包含有关如何调整代码的信息。