簡體   English   中英

Scala - 播放框架創建異常

[英]Scala - Play framework Creation Exception

我正在嘗試將新的 controller 添加到我的 Play 框架中,但我遇到了這個異常

CreationException: Unable to create injector, see the following errors:

1) No implementation for service.GithubService was bound.
  while locating service.GithubService
    for the 2nd parameter of controllers.GithubController.<init>(GithubController.scala:12)
  while locating controllers.GithubController
    for the 3rd parameter of router.Routes.<init>(Routes.scala:28)
  at play.api.inject.RoutesProvider$.bindingsFromConfiguration(BuiltinModule.scala:139):
Binding(class router.Routes to self) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$4)

1 error

這是HomeController.scala文件

package controllers

import play.api._
import play.api.mvc.{BaseController, ControllerComponents}

trait HomeController extends BaseController {
  protected def controllerComponents: ControllerComponents
}

這是GithubController.scala文件

package controllers

import javax.inject.Inject
import models.GithubRepositoryDTO
import play.api.libs.json.{JsValue, Json}
import play.api.mvc._
import service._

import scala.concurrent.{ExecutionContext, Future}

class GithubController @Inject()(
                                  val controllerComponents: ControllerComponents,
                                  githubService: GithubService
                                )(implicit ec: ExecutionContext) extends HomeController {
  def getStarred(): Action[JsValue] = Action.async(parse.json) { implicit request =>
      githubService.getStarredRepositories()

      Future(Ok("test"))
  }
}

這是GithubService.scala文件

package service

import models.GithubRepositoryDTO

import scala.concurrent.Future

trait GithubService {
  def getStarredRepositories():Future[Seq[GithubRepositoryDTO]]
}

這是GithubServiceImpl.scala文件

package service

import javax.inject.Inject
import models.GithubRepositoryDTO
import play.api.libs.json._
import play.api.libs.ws.WSClient

import scala.concurrent.{ExecutionContext, Future}

class GithubServiceImpl @Inject()(
                                  wsClient:WSClient
)(implicit ec: ExecutionContext) extends GithubService {
  def getStarredRepositories(): Future[Seq[GithubRepositoryDTO]] = {
    //some code
  }
}

我檢查了錯誤是否來自服務或 controller 但仍然無法正常工作,歡迎任何幫助或建議。 謝謝!

問題是GithubServiceImpl沒有注冊到依賴注入容器。 您可以在文檔的提供自定義綁定部分找到有關如何執行此操作的信息。

這兩個選項是:

  1. 使用綁定注解:

     @ImplementedBy(classOf[GithubServiceImpl]) trait GithubService { def getStarredRepositories(): Future[Seq[GithubRepositoryDTO]] }
  2. 使用編程綁定,在應用程序根目錄中名為Module.scala的文件中:

     import com.google.inject.AbstractModule import com.google.inject.name.Names class Module extends AbstractModule { override def configure() = { bind(classOf[GithubService]).to(classOf[GithubServiceImpl]) } }

請務必閱讀鏈接文檔以獲取有關其他選項的更多詳細信息,並將綁定聲明為 singleton。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM