2012-04-19 10 views
8

Ich habe die GlobalSettings Klasse erweitert, wie im Tutorial Application global settings gezeigt.Zugriff auf das globale Objekt im Spiel! 2.0 mit Java

Wie bekomme ich dann Zugriff auf die Instanz dieser Klasse, sagen wir von einer Ansichtsmethode? Ich gehe davon aus, dass eine Instanz erstellt wurde, als die Anwendung gestartet wurde und dass es wahrscheinlich ein Mitglied eines Objekts ist.

Ich würde zum Beispiel erwartet, haben sie hier zu finden:

Play.application().getGlobalSettings() 

oder etwas ähnliches, aber ich konnte es nicht überall in der Play finden * Hierarchie..

Irgendwelche Ideen? Danke.

Antwort

-3

Verweisen Sie direkt auf das globale Objekt. Zum Beispiel schreiben Sie nicht:

public class Global extends GlobalSettings {} 

Schreib

object Global extends GlobalSettings {} 

oder

object Global extends Global {} 
class Global extends GlobalSettings {} 

und als Sie gerade schreiben globales Objekt irgendwo im Code verweisen können:

Global.someMethod() 
+0

Ist das Scala? Ich kenne diese Form nicht. Bedeutet das, dass die Instanz von keiner Play-Referenz verfügbar ist? –

+0

Dies ist Scala-Code. Ich bin mir nicht sicher, wie genau Sie das in Java machen würden. – Slavus

+0

Danke, aber ich suche nach einer Java-Lösung, da gibt es so viele neue Dinge für mich und so verwende ich im Moment so wenig Scala wie möglich. Fürs Erste benutze ich nur ein * Singleton * Muster, aber ich möchte wirklich eine bessere Lösung finden. –

5

Ich bin neu in P lay 2.0, aber ich denke, du bist besser bedient mit Plugin-Injektion. Check this out:

https://github.com/typesafehub/play-plugins/tree/master/inject

Mit diesem Ansatz Sie einfach die folgende Zeile in Ihrem Controller hinzuzufügen (und einige andere Konfiguration, wie sie in den obigen Link dokumentiert):

@Inject static MyStaticObj obj; 

und der ganze Rest erfolgt automatisch mit dem Injection-Framework. Keine Notwendigkeit, sich um globale usw. Sorgen zu machen.

Das sagte, wie Sie verbrachte ich viel Zeit zu versuchen, herauszufinden, wie Sie das GlobalSettings-Objekt dafür verwenden, bevor Sie das Plugin-Injection-Framework entdecken.

Mein Sinn ist, dass angesichts der Implementierung von Global (als Klasse im default/unnamed-Paket) es nicht möglich ist, sie irgendwo im Anwendungscode zu referenzieren. Ich bin mir nicht sicher, ob das per Entwurf oder zufällig war (es scheint, dass die Leute von Play heute ziemlich viel über Scala nachdenken ...). Glücklicherweise scheint der Plugin-Ansatz der bessere Weg zu sein, um diese geteilten Globals zu behandeln.

+0

Danke, mir war nicht einmal bewusst, dass es so etwas wie Plugins zum Spielen gibt ... Aber seit ich dieses Plugin benutze, bekomme ich sowieso ein Singleton-Muster, warum mache ich es nicht einfach selbst? Welche Vorteile bietet dieses Plugin gegenüber meiner eigenen Singleton-Implementierung? –

Verwandte Themen