在Play控制器外部播放当前和光滑的DatabaseConfig访问

时间:2017-02-24 11:19:44

标签: scala playframework slick

自Play 2.5.0起,didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {已弃用。 Slick的Play.current需要DatabaseConfigProvider.get[JdbcProfile]对象,该对象过去由play.api.Application提供。有什么其他方法可以获得Play.current play.api.Application对象,当我们需要在Play控制器外部使用Slick时,比如说ActionBuilders吗?

1 个答案:

答案 0 :(得分:2)

注入DatabaseConfigProvider

您正在使用通过全局搜索的DatabaseConfig ,例如

val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current)
...
val dbConfig = DatabaseConfigProvider.get[JdbcProfile]("<db-name>")(Play.current)

使用 DatabaseConfig通过依赖注入(使用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]
  ...
}