如何在play framework2.5中正确注入对象内的play.api.Configuration?
How to inject correctly the play.api.Configuration inside an object in play framework2.5?
我正在升级到 play framework 2.5,我有一些对象很难将它们变成 类 以便使用依赖注入,所以我改用了这个方法:
object test {
@Inject var config: Configuration = _
def portNumber = config.getInt("server.port")
}
但是在运行时我得到了空指针异常,旧代码曾经是这样的:
object test {
def portNumber = Play.configuration.getInt("server.port")
}
但是它已经过时了,我必须用 DI 来改变它。
如果我有 trait 而不是 对象
您可以在单例中设置配置,例如:
@Singleton
class ConfigForTest @Inject()(config: Configuration) {
test.config = config
}
并在 test
对象中从这里 config
设置。
所以你的 test
对象看起来像这样:
object test {
var config: Configuration = _
def portNumber = config.getInt("server.port")
}
不要忘记初始化 Module
中的 Singleton
:
class Module
extends AbstractModule {
@Override()
override def configure(): Unit = {
bind(classOf[ConfigForTest])
.asEagerSingleton()
...
或者如 Shweta 所示,不进行任何注射。因为您有一个 Play 应用程序,这就足够了:
import com.typesafe.config.ConfigFactory
object test {
val portNumber = ConfigFactory.load().getInt("server.port")
}
这需要 application.conf
直接来自类路径。
另一种方法是
import com.typesafe.config.ConfigFactory
val restConfig = ConfigFactory.load("rest.conf") //your conf file
val pageSize = restConfig.getInt("pagesize") //the value you want from conf file
我正在升级到 play framework 2.5,我有一些对象很难将它们变成 类 以便使用依赖注入,所以我改用了这个方法:
object test {
@Inject var config: Configuration = _
def portNumber = config.getInt("server.port")
}
但是在运行时我得到了空指针异常,旧代码曾经是这样的:
object test {
def portNumber = Play.configuration.getInt("server.port")
}
但是它已经过时了,我必须用 DI 来改变它。 如果我有 trait 而不是 对象
您可以在单例中设置配置,例如:
@Singleton
class ConfigForTest @Inject()(config: Configuration) {
test.config = config
}
并在 test
对象中从这里 config
设置。
所以你的 test
对象看起来像这样:
object test {
var config: Configuration = _
def portNumber = config.getInt("server.port")
}
不要忘记初始化 Module
中的 Singleton
:
class Module
extends AbstractModule {
@Override()
override def configure(): Unit = {
bind(classOf[ConfigForTest])
.asEagerSingleton()
...
或者如 Shweta 所示,不进行任何注射。因为您有一个 Play 应用程序,这就足够了:
import com.typesafe.config.ConfigFactory
object test {
val portNumber = ConfigFactory.load().getInt("server.port")
}
这需要 application.conf
直接来自类路径。
另一种方法是
import com.typesafe.config.ConfigFactory
val restConfig = ConfigFactory.load("rest.conf") //your conf file
val pageSize = restConfig.getInt("pagesize") //the value you want from conf file