【问题标题】:Create instance of Dependency Injected class in play 2.5.X在 play 2.5.X 中创建依赖注入类的实例
【发布时间】:2017-02-23 19:11:54
【问题描述】:

在 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."))
  }
}

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

我真正感兴趣的是如何创建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

谁能解释一下,我该如何解决这个问题?

【问题讨论】:

  • 这个辅助方法是什么?您确定控制器是保存它的最佳位置吗?
  • 你的问题不是很清楚。您是在问如何将 Controller 声明为可注入组件?
  • 这是用于单元测试的吗?如果是这种情况,您可能需要查看指南playframework.com/documentation/2.5.x/ScalaTestingWithGuice
  • 在你用@Inject注解标记你的控制器之后,所有的参数都会被注入到HomeController,然后你可以在你需要的时候注入HomeController本身。
  • 我认为您可能希望将此可重用的辅助方法放入服务中,然后您可以将其注入您的控制器中。在我看来,这将是最可重用的,你可以让你的控制器保持苗条/专注于他们所做的事情,并将与一些外部事物的交互委托给另一个组件

标签: scala playframework playframework-2.0


【解决方案1】:

如果你想使用谷歌果汁从Xyz类中使用你的HomeController类的getXXX方法,试试这个

import com.google.inject.Inject

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

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

【讨论】:

    【解决方案2】:

    你应该用

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-19
        • 2017-03-27
        • 1970-01-01
        • 2017-12-26
        相关资源
        最近更新 更多