【发布时间】: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