【问题标题】: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]
      ...
    } 
    

    【讨论】:

      猜你喜欢
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多