我试图对播放剪影种子样本做一些改进,目的是避免在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,当app启动时,它由一个bind(classOf [InitialData])中的Abstract Module调用.asEagerSingleton() .
我被建议将执行上下文传递给initialData类 . 我尝试了def doSomething(隐式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 - Cannot find an implicit ExecutionContext
但没有成功 . 如果有人能给我一些关于注射或构造函数可能出错的见解,我将不胜感激 . 谢谢你的时间 . 夏瑞
1 回答
如果将类绑定为急切单例,则必须注意您的代码不引用静态
play.api.Play.current
调用 . Guice绑定在Play应用程序启动之前连接,绑定为eager singleton的实例也将在应用程序启动之前实例化 . 因此,如果您在此代码中引用已启动的应用程序,则会看到错误"There is no started application" .您的代码中的问题是
DAOSlick
trait在静态引用play.api.Play.current
的帮助下静态创建DatabaseConfig
. 您应该将DatabaseConfigProvider
或DatabaseConfig
实例注入DAO实现中 . 请查看Play Framework documentation应如何做到这一点 .