1

我看过一些与 DI 相关的帖子,它们使用蛋糕模式。

其中之一是我的一位同事共享的http://jonasboner.com/real-world-scala-dependency-injection-di/ 。

但是,如果我需要使用 Play 2.5 中的 WSClient,我可以在不求助于 guice 的情况下掌握它吗?

4

1 回答 1

0

是的,Scala 允许您仅基于语言结构来执行此操作,而无需使用 Guice 等外部 DI 框架。为了说明这一点,请考虑以下示例(此示例大量借鉴了问题中链接的 Jonas Bonér 博客文章):

package di.example

import play.api.libs.ws.WSClient

trait WSClientComponent {
  val wsClient: WSClient
}

NotificationService是要注入WSClient的服务。

package di.example

trait NotificationServiceComponent {this: WSClientComponent =>
  val notificationService: NotificationService

  class NotificationService{
    def getNotifications = wsClient.url("some-url")
  }

}

接下来,ComponentRegistry是将我们的依赖关系连接在一起的“模块”对象。

package di.example

import play.api.libs.ws.{WS, WSClient}

object ComponentRegistry extends WSClientComponent with NotificationServiceComponent {

  override val wsClient: WSClient = WS.client
  override val notificationService: NotificationService = new NotificationService

}
于 2016-07-20T17:21:34.520 回答