0

我正在尝试对 play-silhouette-seed 示例进行一些小改进,目的是避免在 postgres 中手动创建表。我试图遵循

https://github.com/playframework/play-slick/tree/master/samples/computer-database

,但是当我将 bind(classOf[InitialData]).asEagerSingleton() 添加到 InitialData 类时,我遇到了一些注入问题。我得到:注入构造函数时出错,java.lang.RuntimeException:没有启动的应用程序。我上传了暂定的应用程序

https://github.com/renexdev/Play-Auth-Slick-Seed-Load-Schema

. 我修改了 UserImpl.scala 中的一些方法,但重要的文件是 /app/modules/InitialData.scala,它在应用程序启动时由抽象模块在 bind(classOf[InitialData]).asEagerSingleton() 中调用。
有人建议我将执行上下文传递给 initialData 类。我尝试了中建议的 def doSomething(implicit ec: ExecutionContext)

https://github.com/alexandru/scala-best-practices/blob/master/sections/4-concurrency-parallelism.md

和建议的导入 play.api.libs.concurrent.Execution.Implicits._

Play Framework 2.1 - 找不到隐式 ExecutionContext

但没有成功。如果有人能给我一些关于注入或构造函数可能有什么问题的见解,我将不胜感激。谢谢你的时间。ReneX

4

1 回答 1

1

如果你将一个类绑定为渴望单例,你必须注意你的代码没有引用静态play.api.Play.current调用。Guice 绑定是在 Play 应用程序启动之前绑定的,您绑定为渴望单例的实例也将在应用程序启动之前实例化。因此,如果您在此代码中引用已启动的应用程序,您会看到错误“没有已启动的应用程序”。

您的代码中的问题是DAOSlick特征DatabaseConfig在静态引用的帮助下静态创建play.api.Play.current。您应该将DatabaseConfigProviderDatabaseConfig实例注入到您的 DAO 实现中。请查看Play Framework 文档如何执行此操作。

于 2015-10-23T07:20:27.350 回答