我看过几个与DI相关的文章使用蛋糕模式。
其中一位同事http://jonasboner.com/real-world-scala-dependency-injection-di/分享了{{3}}。
但是,如果我需要使用Play 2.5中的说WSClient,我可以在不诉诸guice的情况下掌握这一点吗?
答案 0 :(得分:0)
是的,Scala允许您仅基于语言结构执行此操作,而无需使用Guice等外部DI框架。为了说明这一点,请考虑以下示例(此示例大量借用了问题中链接的JonasBoné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
}