我可以在 Play Framework 中获取默认演员系统的实例吗
Could I get the instance of the defalt actor system in Playframwork
默认的 playframework 应用程序有一个 AsyncController。我需要 ActorSystem
.
class AsyncController @Inject()(cc: ControllerComponents, actorSystem: ActorSystem)(implicit exec: ExecutionContext) extends AbstractController(cc) {
我正在创建一个需要编译时依赖注入的代码。我想我必须创建我的应用程序的所有控制器的实例并将其传递给 Routes
lazy val router = new Routes(httpErrorHandler, homeController,userWSRoutes, countController,asyncController, assets)
我的问题是在创建 AsyncController 的实例时,我不知道要传递什么 ActorSystem
。
lazy val asyncController = new controllers.AsyncController(controllerComponents, system) //what should be system.
我试过注入(也试过隐式)参数,但没用
class AppLoader @Inject()(system: ActorSystem) extends ApplicationLoader {
override def load(context: ApplicationLoader.Context): Application =
new AppComponents(system, context).application
}
class AppComponents (system: ActorSystem, context: Context) extends BuiltInComponentsFromContext(context)
with CassandraRepositoryComponents
with HttpFiltersComponents
with controllers.AssetsComponents{
...
lazy val asyncController = new controllers.AsyncController(controllerComponents, system) //doesn't work.
}
我收到以下错误
! @777ipfa31 - Internal server error, for (GET) [/] ->
play.api.UnexpectedException: Unexpected exception[InstantiationException: AppLoader]
at play.core.server.DevServerStart$$anon.reload(DevServerStart.scala:186)
at play.core.server.DevServerStart$$anon.get(DevServerStart.scala:124)
at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:189)
at play.core.server.AkkaHttpServer.$anonfun$createServerBinding(AkkaHttpServer.scala:106)
at akka.stream.impl.fusing.MapAsync$$anon.onPush(Ops.scala:1194)
at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:519)
at akka.stream.impl.fusing.GraphInterpreter.processEvent(GraphInterpreter.scala:482)
at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:378)
at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:585)
at akka.stream.impl.fusing.GraphInterpreterShell$AsyncInput.execute(ActorGraphInterpreter.scala:469)
Caused by: java.lang.InstantiationException: AppLoader
at java.lang.Class.newInstance(Class.java:427)
at play.api.ApplicationLoader$.apply(ApplicationLoader.scala:79)
at play.core.server.DevServerStart$$anon.$anonfun$reload(DevServerStart.scala:173)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.core.server.DevServerStart$$anon.reload(DevServerStart.scala:171)
at play.core.server.DevServerStart$$anon.get(DevServerStart.scala:124)
at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:189)
at play.core.server.AkkaHttpServer.$anonfun$createServerBinding(AkkaHttpServer.scala:106)
at akka.stream.impl.fusing.MapAsync$$anon.onPush(Ops.scala:1194)
at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:519)
Caused by: java.lang.NoSuchMethodException: AppLoader.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
at play.api.ApplicationLoader$.apply(ApplicationLoader.scala:79)
at play.core.server.DevServerStart$$anon.$anonfun$reload(DevServerStart.scala:173)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.core.server.DevServerStart$$anon.reload(DevServerStart.scala:171)
at play.core.server.DevServerStart$$anon.get(DevServerStart.scala:124)
at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:189)
at play.core.server.AkkaHttpServer.$anonfun$createServerBinding(AkkaHttpServer.scala:106)
at akka.stream.impl.fusing.MapAsync$$anon.onPush(Ops.scala:1194)
[error] application -
BuiltInComponentsFromContext
在其变量 actorSystem
中引用了 Actor 系统。
lazy val asyncController = new controllers.AsyncController(controllerComponents, actorSystem)
默认的 playframework 应用程序有一个 AsyncController。我需要 ActorSystem
.
class AsyncController @Inject()(cc: ControllerComponents, actorSystem: ActorSystem)(implicit exec: ExecutionContext) extends AbstractController(cc) {
我正在创建一个需要编译时依赖注入的代码。我想我必须创建我的应用程序的所有控制器的实例并将其传递给 Routes
lazy val router = new Routes(httpErrorHandler, homeController,userWSRoutes, countController,asyncController, assets)
我的问题是在创建 AsyncController 的实例时,我不知道要传递什么 ActorSystem
。
lazy val asyncController = new controllers.AsyncController(controllerComponents, system) //what should be system.
我试过注入(也试过隐式)参数,但没用
class AppLoader @Inject()(system: ActorSystem) extends ApplicationLoader {
override def load(context: ApplicationLoader.Context): Application =
new AppComponents(system, context).application
}
class AppComponents (system: ActorSystem, context: Context) extends BuiltInComponentsFromContext(context)
with CassandraRepositoryComponents
with HttpFiltersComponents
with controllers.AssetsComponents{
...
lazy val asyncController = new controllers.AsyncController(controllerComponents, system) //doesn't work.
}
我收到以下错误
! @777ipfa31 - Internal server error, for (GET) [/] ->
play.api.UnexpectedException: Unexpected exception[InstantiationException: AppLoader]
at play.core.server.DevServerStart$$anon.reload(DevServerStart.scala:186)
at play.core.server.DevServerStart$$anon.get(DevServerStart.scala:124)
at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:189)
at play.core.server.AkkaHttpServer.$anonfun$createServerBinding(AkkaHttpServer.scala:106)
at akka.stream.impl.fusing.MapAsync$$anon.onPush(Ops.scala:1194)
at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:519)
at akka.stream.impl.fusing.GraphInterpreter.processEvent(GraphInterpreter.scala:482)
at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:378)
at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:585)
at akka.stream.impl.fusing.GraphInterpreterShell$AsyncInput.execute(ActorGraphInterpreter.scala:469)
Caused by: java.lang.InstantiationException: AppLoader
at java.lang.Class.newInstance(Class.java:427)
at play.api.ApplicationLoader$.apply(ApplicationLoader.scala:79)
at play.core.server.DevServerStart$$anon.$anonfun$reload(DevServerStart.scala:173)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.core.server.DevServerStart$$anon.reload(DevServerStart.scala:171)
at play.core.server.DevServerStart$$anon.get(DevServerStart.scala:124)
at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:189)
at play.core.server.AkkaHttpServer.$anonfun$createServerBinding(AkkaHttpServer.scala:106)
at akka.stream.impl.fusing.MapAsync$$anon.onPush(Ops.scala:1194)
at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:519)
Caused by: java.lang.NoSuchMethodException: AppLoader.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
at play.api.ApplicationLoader$.apply(ApplicationLoader.scala:79)
at play.core.server.DevServerStart$$anon.$anonfun$reload(DevServerStart.scala:173)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.core.server.DevServerStart$$anon.reload(DevServerStart.scala:171)
at play.core.server.DevServerStart$$anon.get(DevServerStart.scala:124)
at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:189)
at play.core.server.AkkaHttpServer.$anonfun$createServerBinding(AkkaHttpServer.scala:106)
at akka.stream.impl.fusing.MapAsync$$anon.onPush(Ops.scala:1194)
[error] application -
BuiltInComponentsFromContext
在其变量 actorSystem
中引用了 Actor 系统。
lazy val asyncController = new controllers.AsyncController(controllerComponents, actorSystem)