【发布时间】:2016-07-23 07:12:52
【问题描述】:
在this question 中,一个答案说Application 类必须这样定义:
class Application @Inject()(val messagesApi: MessagesApi) extends Controller with I18nSupport {
我将这一行理解为:
- 命名为
Application - 扩展
Controller - 混合特征
I18nSupport
如何阅读/理解中间的@Inject() 和(val ...)?为什么要这样写,这是什么意思?
【问题讨论】:
-
看起来这是一个关于依赖注入的一般问题。当然会有所帮助:playframework.com/documentation/2.5.x/ScalaDependencyInjection
-
I18nSupport 是带有抽象
def messagesApi: MessagesApi的特征。您需要提供实施。所以你把它定义为val messagesApi: MessagesApi。@Inject表示 - 构造函数参数将由依赖注入提供。 -
除了@PavelOliynyk 所说的之外,this issue 解释说文档对新人不太欢迎。默认情况下,Play 在 DI 的底层使用 Guice。在上述问题中,一位评论者链接到了一些可能有帮助的优秀 Guice 文档。
标签: scala dependency-injection