[英]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
沒有注冊到依賴注入容器。 您可以在文檔的提供自定義綁定部分找到有關如何執行此操作的信息。
這兩個選項是:
使用綁定注解:
@ImplementedBy(classOf[GithubServiceImpl]) trait GithubService { def getStarredRepositories(): Future[Seq[GithubRepositoryDTO]] }
使用編程綁定,在應用程序根目錄中名為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.