2012-06-18 37 views
12

Làm cách nào để tạo đối tượng/biến toàn cục trong Play Framework 2.0 bằng Scala?Cách tạo biến toàn cục với Play Framework 2.0

Tôi muốn tạo một đối tượng đã từng khởi tạo, có thể tồn tại giữa nhiều thao tác điều khiển để các hành động khác nhau vẫn có thể gọi trên cùng một đối tượng (vì khởi tạo đối tượng rất đắt).

Điều này có thể thực hiện được nếu không lưu trữ nó vào DB không? Tôi cố gắng gắn bó với đối tượng vào một đối tượng toàn cầu đối với phương pháp onStart như ở đây:

http://www.playframework.org/documentation/2.0/ScalaGlobal

Đây là mã của tôi:

(trong thư mục ứng dụng gốc)

object Global extends GlobalSettings { 

    override def onStart(app:Application) { 
    var foo = new Foo 
    } 
    } 

} 

Và trong các hành động điều khiển của tôi, tôi thử gọi biến bằng tên, nhưng nó không hoạt động.

+0

Vui lòng hiển thị một số mã bạn đã thử. Tôi đã sử dụng thành công Global (cần phải ở trong gói mặc định). – opyate

+0

Thực ra, tôi có thể có câu trả lời trong [câu hỏi liên quan] của tôi (http://stackoverflow.com/questions/11091902/best-way-to-define-globals-in-a-play-2-0-application), nhưng đang tự hỏi liệu có cách nào tốt hơn không. – opyate

+0

Cảm ơn, mã của bạn trong câu hỏi liên quan phù hợp với tôi! Tôi cũng đã thay đổi câu hỏi của mình để hiển thị mã tôi đã có. – wynnch

Trả lời

15

Nếu globals của bạn cũng cần phải được cung cấp cho các phương pháp trong Global, đặt chúng trong Global.scala như vậy:

package object globals { 
    lazy val abc = Play.maybeApplication.flatMap(_.configuration.getString("abc")).getOrElse("default_value_of_abc") 
    lazy val someActor = Akka.system.actorOf(Props[SomeActor], name = "someActor") 
} 

Và sau đó sử dụng nó trong các bộ điều khiển của bạn như thế này:

println(globals.abc) 
globals.someActor ! SomeMessage 

CẬP NHẬT

Tài liệu này đã được cập nhật cách thêm Global.scala vào một idiomat Chơi ic! cách, với tài liệu cho cả hai số ScalaJava.

+1

Bạn có biết cách thực hiện nó trong Java không? – JhovaniC

Các vấn đề liên quan