【问题标题】:Play.current and slick DatabaseConfig access outside Play controllersPlay.current 和 slick DatabaseConfig 在 Play 控制器之外访问
【发布时间】:2017-02-24 11:19:44
【问题描述】:
从 Play 2.5.0 开始,Play.current 已弃用。 Slick 的DatabaseConfigProvider.get[JdbcProfile] 需要play.api.Application 对象,该对象以前由Play.current 提供。当我们需要在 Play 控制器之外使用 Slick 时,比如 ActionBuilders,还有其他方法可以获取 DatabaseConfigProvider.get[JdbcProfile] 的 play.api.Application 对象吗?
【问题讨论】:
标签:
scala
playframework
slick
【解决方案1】:
注入DatabaseConfigProvider
您正在通过全局查找使用 DatabaseConfig,例如
val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current)
...
val dbConfig = DatabaseConfigProvider.get[JdbcProfile]("<db-name>")(Play.current)
DatabaseConfig via Dependency Injection也可以做到这一点(使用 play 2.5.x):
class Application @Inject()(dbConfigProvider: DatabaseConfigProvider) extends Controller {
val dbConfig = dbConfigProvider.get[JdbcProfile]
...
class Application2 @Inject()(@NamedDatabase("<db-name>") dbConfigProvider: DatabaseConfigProvider) extends Controller {
如果你想在控制器之外使用它,你需要将注入的数据库配置传递给那里,或者你可以传递注入器本身,然后从中获取数据库配置,比如
class UserRepo(implicit inj: Injector) extends HasDatabaseConfig[JdbcProfile] with Injectable {
override protected val dbConfig: DatabaseConfig[JdbcProfile] = inject[DatabaseConfigProvider].get[JdbcProfile]
...
}