अभिनेता:
trait DBComponent {
def db: ActorRef // no compile time guarantees
type K
type V
object DBActor {
case class Put(key: K, value: V)
case class Get(key: K)
}
class DBActor {
import DBActor._
val db = scala.collection.mutable.Map.empty[K, V]
def receive = {
case Put(k, v) => db.put(k, v)
case Get(k) => sender ! db.get(k)
}
}
}
trait ServiceComponent {
this: DBComponent =>
import DBActor._
// you could be talking to deadLetters for all you know
def put(k: K, v: V): Unit = db ! Put(k, v)
def get(k: K): Option[V] = {
implicit val timeout = Timeout(5 seconds)
val future = ask(actor, Get(k)).mapTo[Option[V]]
Await.result(future, timeout.duration)
}
}
होने निर्भरता (जहां यह करने के लिए कुछ खास नहीं है) अभिनेता:
trait DBComponent {
def db: DB
type K
type V
trait DB {
def put(key: K, value: V): Unit
def get(key: K): Option[V]
}
}
trait ServiceComponent {
this: DBComponent =>
object ServiceActor {
case class Put(key: K, value: V)
case class Get(key: K)
}
class ServiceActor {
import ServiceActor._
def receive = {
case Put(k, v) => db.put(k, v) // db is in scope
case Get(k) => sender ! db.get(k)
}
}
}
के बारे में क्या दूसरी तरह के आसपास, बातें नहीं निर्भरता के रूप में अभिनेता होने, लेकिन अभिनेताओं होने निर्भरता, जो कि मैं क्या सोचता ओपी पूछ रहा था के बारे में। –
थैक्स इसे इंगित करने के लिए। मैंने अपना जवाब अपडेट कर लिया है। – agilesteel
लेकिन मेरा मुद्दा यह है कि जब सर्विसएक्टर को अन्य सेवा प्राधिकारी को संदेश भेजना होता है तो मैं जिस मानक तरीके से पढ़ता हूं वह आवश्यक अभिनेता बनाने के लिए "context.actorOf [अन्य सेवा चिकित्सक] विधि का उपयोग कर रहा है। इस बिंदु पर, मुझे त्रुटियां मिलती हैं यदि अन्य सर्विसएक्टर एक विशेषता में लपेटा गया है क्योंकि यह उस दायरे में इसे तुरंत चालू करने में असमर्थ है। – Owen