Я не могу понять, как вводить Сервис в актера.инъекционная услуга для актера дает NullPointerException
Я опробовал несколько подходов и считаю, что этот должен соответствовать наилучшим образом.
Я думаю, что основная проблема заключается в том, что я предоставляю websocket следующему актеру в качестве параметра. Когда я вытягиваю Inject до компиляции подписи класса, это не выполняется из-за конфликта подписи. Я попытался добавить объявление неявного объявления currying для инъекции службы, но это тоже не сработало.
Что мне делать, чтобы все исправить?
Выполнение этого кода приводит к исключению NullPointerException.
package actors
import akka.actor._
import com.google.inject.Inject
import play.api.libs.json._
import models._
import services.WeatherService
/**
* Created by jbc on 28.12.16.
*/
class WeatherWSActor (out: ActorRef) extends Actor {
@Inject() val weatherService: WeatherService = null
def handleMessage(msg: JsValue): JsValue = {
val req = msg.as[Request]
req match {
case Request("daily") => Json.toJson(weatherService.getFourDays())
case Request("next") => Json.toJson(weatherService.getNextHour())
}
}
override def receive: Receive = {
case msg: JsValue => out ! handleMessage(msg)
case _ => out ! "Bad Request"
}
@scala.throws[Exception](classOf[Exception])
override def postStop(): Unit = {
}
}
object WeatherWSActor {
def props(out: ActorRef) = Props(new WeatherWSActor(out))
}
Controller Код:
class WeatherWSController @Inject() (implicit system: ActorSystem, materializer: Materializer) extends Controller {
def socket = WebSocket.accept[JsValue, JsValue] { request =>
ActorFlow.actorRef(out => WeatherWSActor.props(out));
}
}
служба устанавливается с этим модулем кодекса
class Module extends AbstractModule {
override def configure(): Unit = {
bind(classOf[WeatherService]).to(classOf[WeatherServiceImpl]).asEagerSingleton()
}
}