提前感谢您抽出时间来看看我目前的游戏问题。
我仍在尝试 Playframework,目前是 2.3 版。
目前我试图弄清楚依赖注入。我遵循了激活器中为 guice 和 scaladi 提供的教程,并且总是导致相同的编译器错误:
play.PlayExceptions$CompilationException: Compilation error[object Application is not a member of package controllers Note: class Application exists, but it has no companion object.]
这让我觉得我错过了 Playframework 的一个更通用的部分,因为这个问题与特定的 DI 框架无关。
因此,让我描述一下我对 scaladi 的尝试(任何带有 guice 的工作解决方案也将不胜感激):
在 conf/routes 中定义路由:
GET / @controllers.Application.index
(添加了 @ 以支持自 play 2.1 afaik 起支持的托管控制器)
定义控制器:
package controllers
import scaldi.{Injector, Injectable}
import scala._
import play.api._
import play.api.mvc._
import services.GreetingService
class Application(implicit inj: Injector) extends Controller with Injectable {
val greetService= inject [GreetingService]
def index = Action {
Ok("Here I am")
}
}
在 app\Global.scala 下定义 Global 以修改 GlobalSetting:
import modules.ApplicationModule
import play.api.GlobalSettings
import scaldi.play.ScaldiSupport
object Global extends GlobalSettings with ScaldiSupport {
def applicationModule = new ApplicationModule
}
最后是 app\modules\ApplicationModule.scala 下的应用模块:
package modules
import controllers.Application
import scaldi.Module
class ApplicationModule extends Module {
binding to new Application
}
所以我真的很感激任何帮助来弄清楚为什么 Application 类不能位于包控制器中。同样,我会对任何可行的解决方案感到高兴,可能是 guice 或 scaladi。
谢谢!
编辑: 问题是另一个路由的第二个控制器也在“/conf/routes/”下注册。该控制器尚未管理。因此,在我将上面描述的步骤调整到第二个控制器之后,一切正常。