为什么我们需要隐式应用

时间:2015-03-04 18:48:34

标签: scala playframework-2.0

我正在使用Play Framework和Scala创建一个应用程序,并使用隐式

创建该应用程序
  

play.api.Application

为什么我们需要在我们的范围内使用此应用程序?

提前致谢

1 个答案:

答案 0 :(得分:0)

这是开发人员提出的架构选择。框架的某些组件需要引用Application(通常是当前运行的Application)。首先想到的是Cache,DB,Messages(i18n),Evolutions和WS API。

Application特征是正在运行的Play应用程序的一个组成部分。它用于保存应用程序配置,路由,插件引用,GlobalSettings对象,应用程序日志记录等。

例如,当我打电话时:

DB.withConnection { implicit c =>
    ...
}

我需要在范围内play.api.Play.current(当前正在运行Application)。为什么?如果需要,它知道加载了哪个DBApi,以及其他数据库配置选项。

同样,当我调用play.api.cache.Cache.set(...)时,我需要一个隐式Application,以便缓存API确定加载了哪些缓存插件,以及使用哪个缓存插件。

为什么这些API都不会引用当前正在运行的Application?打败我,真的。在任何地方都有一个硬编码的Application引用肯定会损害模块性。我想你可能有多个运行的应用程序用于测试等等。我记得在未来的版本中可能会消失play.api.Play.current以消除保持全局状态的需要,尽管我找不到源代码。