繁体   English   中英

Scala Play 2带有特征的Guice依赖注入

[英]Scala Play 2 Guice dependency injection with traits

在我的应用程序中,我具有以下特征/混凝土类:

models.daos

trait UserDAO // UserDAO.scala
class UserDAOImpl @Inject() (app: play.api.Appliction) extends UserDAO // UserDAOImpl.scala

在包controllers

class Application @Inject() (userDao: UserDAO) extends Controller

但是,当我运行该应用程序时,我得到:

ProvisionException: Unable to provision, see the following errors:

1) No implementation for models.daos.UserDAO was bound.
  while locating models.daos.UserDAO
    for parameter 0 at controllers.Application.<init>(Application.scala:15)
  while locating controllers.Application
    for parameter 1 at router.Routes.<init>(Routes.scala:31)
  while locating router.Routes
  while locating play.api.inject.RoutesProvider
  while locating play.api.routing.Router

我是依赖注入的新手,并不真正知道如何告诉Guice使用具体的类。

您需要扩展AbstractModule

class DaoModule extends AbstractModule {
  def configure() = {
    bind(classOf[UserDAO])
     .to(classOf[UserDAOImpl])
  }
}

conf/application.conf您需要添加:

play.modules.enabled += "modules.DaoModule"

您需要在代码中的某个位置创建注入器,通常是在Play模块的Global对象中:

object Global extends GlobalSettings {

  val injector = Guice.createInjector(
    new AbstractModule {
      protected def configure() = {
        bind(classOf[UserDAO]).to(classOf[UserDAOImpl])
      }
    }
  )
  ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM