我正在使用Play Framework和Scala创建一个应用程序,并使用隐式
创建该应用程序play.api.Application
为什么我们需要在我们的范围内使用此应用程序?
提前致谢
答案 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
以消除保持全局状态的需要,尽管我找不到源代码。