2016-07-10 11 views
0

ich folgende Singletons haben in Scala definiertZugriff Singleton Werte in Spielen für Scala

package main 

import javax.inject._ 

@Singleton 
class Properties { 
    val timeout = 120 
} 

wie greife ich es von anderen Programmen? Ich habe versucht, main.Properties.timeout aber es wirft einen Kompilierung Fehlermeldung, dass ein Begleiter Objekt nicht

Antwort

1

gefunden wurde Wenn Sie es in der Art und Weise zugreifen möchten, dass Sie erwähnt haben: main.Properties.timeout, dann Begleiter-Objekt verwenden, statt:

class Properties { 
    // ... 
} 
object Properties { 
    val timeout = 120 
    // ... 
} 

Mit @Singleton Annotation, müssen Sie diesen Service irgendwo injizieren, um es verwenden zu können. So etwas wie folgt aus:

import javax.inject._ 
import main.Properties 

class SomeService @Inject() (props:Properties)() { 
    println(props.timeout) 
} 

Hier ist die Dokumentation über DI für PlayFramework: https://www.playframework.com/documentation/2.5.x/ScalaDependencyInjection - für den letzten Test (nicht 2.0), aber es ist ein guter Startpunkt.

+0

Danke, was wäre die bevorzugte Methode? Ich muss den Wert aus einer Eigenschaftendatei laden und in allen Anwendungsklassen verfügbar machen. – ps0604

+0

Wenn Werte in der Eigenschaftendatei sind, dann vielleicht noch ein anderer Weg: durch Konfiguration? In neueren Versionen von Play musst du die Play-Konfiguration injizieren, dann gehst du auf "@ Inject". Wenn Sie das Framework unabhängig halten wollen, gehen Sie einfach auf "@ Inject". – michaJlS