1
私はDependency Injectionが新しく、アプリケーションをPlay 2.5.xに移行した時点で私は学ぶ必要があります。Akkaの俳優の@Singletonの使い方は?
import scala.concurrent.duration.DurationInt
import scala.language.postfixOps
import akka.actor._
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import scalaj.http._
import WorkerService
object PollActor {
def props(host: String) = Props(new PollActionActor(host))
}
// Actor that polls a host for information
class PollActor(host: String) extends Actor with ActorLogging {
// timer for poll
var timer: Cancellable = context.system.scheduler.schedule(0 second, 10 second, self, TimeStep())
// handle messages
override def receive = {
case TimeStep() =>
getWork match {
case Some(work:String) =>
// How to do this?: ChecklistService.doWork(work)
case None =>
}
}
def getWork = {
try {
Some(Http(host)
.option(HttpOptions.readTimeout(10000))
.option(HttpOptions.connTimeout(10000))
.asString.body)
} catch {
case _:Throwable =>
None
}
}
case class TimeStep()
}
そして、このようなコントローラ何か:
@Singleton
class Application @Inject() (implicit system: ActorSystem) extends Controller {
val pollActor = system.actorOf(PollActor.props("127.0.0.1"))
def index = Action {
pollActor ! TimeStep
}
}
import javax.inject._
@Singleton
class WorkerService {
def doWork(work:String) {
...
}
}
私はこのような何かを探している俳優を持っている:
私はこのような何かを探してシングルトンサービスを持っています
アクターのタイムステップでWorkerService.doWork
に電話するにはどうすればよいですか?
ありがとうございました。私のアプリケーションが何かを再び実行できるようになるとすぐにこれを試みます。この移行は大きな苦痛です。 'オブジェクトPollActor {(アウト:ActorRef) DEF小道具:=小道具(新しいPollActor(アウト)) } –
[OK]を、これは建設中のパラメータを持っていないが、これは動作しない俳優のために働くようです{ ... } ' –
私はこれを試してもうまくいきましたが、私のアプリケーションは本当に難しかったので、私はScalas singletonに戻りました。それらのパラメータを注入されたパラメータでApplicationクラスから開始しました。最初からアプリケーションを実行することは別の問題です。ありがとう! –