在play 2.5.X中创建Dependency Injected类的实例

时间:2016-10-14 11:09:52

标签: scala playframework playframework-2.0

在Play 2.5.X中,我们需要使用依赖注入。以下代码是play-documentation中的一个示例:

class HomeController @Inject() (configuration: play.api.Configuration) extends Controller {
  def index = Action {
    Ok(views.html.index("Your new application is ready."))
  }
}

如果我在getXXX中定义了一些额外的帮助方法HomeController并需要从其他地方访问它,我该如何访问此方法?

我真正感兴趣的是如何创建HomeController的实例,以便我可以使用homeControllerInstance.getXXX

如果我尝试创建如下的实例:

val homeControllerInstance = new HomeController()

我收到错误:

Compilation error[not enough arguments for constructor HomeController: (configuration: play.api.Configuration)HomeController

我尝试将HomeController类声明更改为:

class HomeController @Inject(configuration: play.api.Configuration) extends Controller

但是这给了我错误:

classfile annotation arguments have to be supplied as named arguments

有人可以解释一下,我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

如果您想使用谷歌果汁从getXXX课程中使用HomeController课程的Xyz方法,请尝试此操作

import com.google.inject.Inject

class Xyz @Inject()(homeCon: HomeController) {
   homeCon.getXXX
}

虽然我不确定你的实际问题是什么,但希望这有帮助。

答案 1 :(得分:0)

您应该使用

实例化该类
play.api.Play.current.injector.instanceOf(classOf[UID])

答案 2 :(得分:0)

有时您需要在@Inject关键字之后添加一个新行,这样:

class HomeController @Inject(a :IWantThisInjected) (configuration: play.api.Configuration)

失败并出现该错误,但将第一组参数移动到下一行可以修复它:

class HomeController @Inject (a :IWantThisInjected) (configuration: play.api.Configuration)