2016-10-06 69 views
0

閱讀的conf文件,我們可以使用不能playframework < 2.5 playframework 2.5

val value = Play.current.configuration.getString("confKey") 

但在2.5我們已經警告在對象播放

方法電流棄用:這是一個靜態參考應用程序,使用DI代替

package tmp 

object TmpObj { 
    val confVal = ??? // read key-value from application.conf or *.conf 
} 

所以,我的問題是 - 「我如何從項目使用DI中的任何對象讀取conf?」

請幫助我明白我必須??????application.conf或獲得價值的另一個寫somePath/file.conf

import javax.inject.Inject 
import play.api.Configuration 

class AppConfig @Inject() (configuration: play.api.Configuration) { 
    val someConfValue = configuration.underlying.getString("someConfValue") 
} 

object ConfigReader extends AppConfig(??????) { 
    def getSomeConfValue() = someConfValue 
} 

println(ConfigReader.getSomeConfValue()) 
+0

你想解決什麼問題?另外,'對象'不能很好地與依賴注入混合使用。 – marcospereira

+0

@marcospereira在對象,例如... - val mongoClient = MongoClient('hostFromConfig','portFromCOnfig') –

回答

0

爲了這個,我創建的文件服務/ ConfigReader.scala

package services 

import javax.inject.Inject 
import play.api.{Configuration, Environment} 

class AppConfig @Inject()(playConfig: Configuration) { 
    val dbHost: Option[String] = playConfig.getString("mydb.host") 
    val dbPort: Option[Long] = playConfig.getLong("mydb.port") 
} 

object ConfigReader { 
    val config = new AppConfig(Configuration.load(Environment.simple())) 
    def getDbHost: String = config.dbHost.getOrElse("localhost") 
    def getDbPort: Long = config.dbPort.getOrElse(27017) 
} 

我在conf/application.conf

mydb { 
    host = 192.168.0.0 
    port = 1234 
} 

prescrib,我不得不從任何位置訪問一個配置機會通過導入我的ConfigReader,例如在控制器中

package controllers 

import play.api.mvc._ 
import services.ConfigReader 

class SomeCtrl extends Controller { 
    def index = Action { request => 
    Ok(ConfigReader.getDbHost + ":" + ConfigReader.getDbPort.toString) 
    } 
} 

其工作正常,bu我仍然想從myconf/myconf.conf做到這一點,並尋找方式

0

由於AppConfig的需要「配置」對象,其實例創建要求對象。擁有@Inject()表示法只是告訴DI框架它需要在編譯時提供這種依賴關係。

因此,有解決你想達到什麼樣的方式有兩種: 而不是定義對象定義一個類ConfigReader的:

class ConfigReader(config: play.api.Configuration) extends AppConfig(config) { 
    def getSomeConfValue() = someConfValue 
} 

或者因爲你已經推出的DI框架,讓它處理所有依賴你。

class ConfigReader @Inject() (appConfig: AppConfig) { 
    def getSomeConfValue() = appConfig.someConfValue 
} 

然後無論哪裏需要ConfigReader注入。

+0

我需要對象ConfigReader不是類,無論如何,我的問題仍然留在我必須轉移到新的ConfigReader(? ????)得到application.conf或任何* .conf –