为什么我们需要隐式应用程序
Why we need implicit Application
我正在使用 Play Framework 和 Scala 创建一个应用程序,并且该应用程序使用隐式
play.api.Application
为什么我们的范围需要这个应用程序?
提前致谢
这是开发人员做出的架构选择。框架的某些组件需要引用 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
可能会在未来的版本中消失,以消除保持全局状态的需要,尽管我找不到来源。
我正在使用 Play Framework 和 Scala 创建一个应用程序,并且该应用程序使用隐式
play.api.Application
为什么我们的范围需要这个应用程序?
提前致谢
这是开发人员做出的架构选择。框架的某些组件需要引用 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
可能会在未来的版本中消失,以消除保持全局状态的需要,尽管我找不到来源。