Roy*_*Lin 8 playframework playframework-2.4
在Play 2.4中,覆盖ApplicationLoader中的builder方法或在Abstract模块中实现EagerBinding将替换现有的play 2.3 GlobalSettings onStart.
但是在onStart方法2.3中,您的应用程序已经开始加载所有插件/依赖项.你可以在游戏2.4中做同样的事情,即在应用程序启动后运行一段代码.
在我的情况下,Slick要求应用程序在它可以访问数据库之前已经启动.
谢谢
众所周知,当你急切地在一个类中绑定一个类时Module,会尝试尽快初始化它的一个实例.在play framework 2.4中,这是在应用程序启动之前运行代码的方式.
但遵循DI的常见预期规则:如果,在要运行的类的构造函数中,添加为参数(也称为"依赖项"),app: Application那么它将在应用程序启动后执行; 像这样:
import play.api.Application
import javax.inject.Inject
class MyInitCodeClass @Inject() (val app: Application) {
//YOUR CODE HERE
}
Run Code Online (Sandbox Code Playgroud)
这是合乎逻辑的,因为任何有价值的DI框架都可以确定哪些类可以按哪种顺序注入.
然后在你的模块中添加通常的绑定(这里是playframework样式而不是Guice):
bind[MyInitCodeClass] toSelf eagerly()
Run Code Online (Sandbox Code Playgroud)
希望这有效.Play.current使用Play 2.4的新DI系统停止使用并注入应用程序也很有用.
我想在playframework gitter room给@easel一些信用来帮助我.
罗伊,不太明白你的问题。
正如您提到的,您在使用 EagerBinding 时遇到问题吗?
如果您愿意,您仍然可以使用 GlobalSettings onStart、beforeStart 等,但由于希望摆脱全局状态,因此不鼓励这样做。
| 归档时间: |
|
| 查看次数: |
2204 次 |
| 最近记录: |