【发布时间】:2018-08-04 21:27:54
【问题描述】:
我的控制器代码有一个 trait 和该 trait 的实现,它也扩展了 CustomeExecutionContext,但 Guice 找不到我的实现。
控制器代码:
package controllers
import javax.inject._
import play.api._
import play.api.mvc._
import play.api.libs.json._
import com.ntu.rule._
import akka.actor.ActorSystem
import scala.concurrent.Future
import play.api.libs.concurrent._
import scala.concurrent.ExecutionContext
trait RuleValidationExecutionContext extends ExecutionContext
class RuleValidationExecutionContextImpl @Inject()(system: ActorSystem)
extends CustomExecutionContext(system, "rule-validation-context") with RuleValidationExecutionContext
@Singleton
class RulesController @Inject()(cc: ControllerComponents,
ruleValidationExecutionContext: RuleValidationExecutionContext) extends AbstractController(cc) {
def validate() = Action(parse.json).async { implicit request: Request[JsValue] =>
Future {
val rule = (request.body \ "rule").as[String]
val parsedRule = RuleUtils.parseRules(rule)
val (isSuccess, message) = RuleUtils.validate(parsedRule)
Ok(Json.parse(
s"""
|{"success": $isSuccess, "message": "$message"}
""".stripMargin))
}(ruleValidationExecutionContext)
}
}
还有application.conf:
rule-validation-context {
fork-join-executor {
parallelism-factor = 20.0
parallelism-max = 200
}
}
当我请求操作时,它会显示:
1 error]
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1.reload(DevServerStart.scala:186)
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1.get(DevServerStart.scala:124)
at play.core.server.AkkaHttpServer.play$core$server$AkkaHttpServer$$modelConversion(AkkaHttpServer.scala:183)
at play.core.server.AkkaHttpServer.play$core$server$AkkaHttpServer$$handleRequest(AkkaHttpServer.scala:189)
at play.core.server.AkkaHttpServer$$anonfun$5.apply(AkkaHttpServer.scala:106)
at play.core.server.AkkaHttpServer$$anonfun$5.apply(AkkaHttpServer.scala:106)
at akka.stream.impl.fusing.MapAsync$$anon$24.onPush(Ops.scala:1191)
at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:512)
at akka.stream.impl.fusing.GraphInterpreter.processEvent(GraphInterpreter.scala:475)
at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:371)
Caused by: com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) No implementation for controllers.RuleValidationExecutionContext was bound.
while locating controllers.RuleValidationExecutionContext
for the 2nd parameter of controllers.RulesController.<init>(RulesController.scala:19)
while locating controllers.RulesController
for the 4th parameter of router.Routes.<init>(Routes.scala:38)
while locating router.Routes
while locating play.api.inject.RoutesProvider
while locating play.api.routing.Router
for the 1st parameter of play.api.http.JavaCompatibleHttpRequestHandler.<init>(HttpRequestHandler.scala:222)
while locating play.api.http.JavaCompatibleHttpRequestHandler
while locating play.api.http.HttpRequestHandler
for the 6th parameter of play.api.DefaultApplication.<init>(Application.scala:236)
at play.api.DefaultApplication.class(Application.scala:235)
while locating play.api.DefaultApplication
while locating play.api.Application
但是实现在上面的控制器代码中,为什么Guice找不到呢? 我的 Scala 版本是 2.11.11,Play Framework 版本是 2.6.11
【问题讨论】:
标签: scala playframework playframework-2.0 guice