Scala 中的 Guice:class 本身具有 DI 构造函数的模块

Guice in Scala: Module for a class that has a DI-constructor itself

我正在使用 codingwell/scala-guice 并尝试将 DAO-classes 注入到其他 components/classes.

的构造函数中

第一次尝试,我只用了一个DAO-class看看是否可行:

class DaoModule extends AbstractModule with ScalaModule {
  override def configure() {
    val dao1 = new FirstDaoImpl
    bind(new TypeLiteral[FirstDaoTrait] {}).toInstance(dao1)
  }
}

绑定按预期工作,可用于构造函数注入。

在第二步中,我想在模块中添加另一个 DAO class。但是,那个 DAO-class 依赖于第一个 DAO:

class SecondDaoImpl @Inject()(firstDao: FirstDaoTrait) extends SecondDaoTrait

我不确定如何向现有模块添加必要的绑定。重复第一步将导致:

val dao2 = new SecondDaoImpl(???)
bind(new TypeLiteral[SecondDaoTrait] {}).toInstance(dao2)

但是当然这个 class 只能通过提供第一个 DAO(因此是“???”)来实例化。我该怎么做?

使用 bind 并让 scala-guice 为您解决依赖关系:

class DaoModule extends AbstractModule with ScalaModule {
  override def configure() {
    bind[FirstDaoTrait].to[FirstDaoImpl]
    bind[SecondDaoTrait].to[SecondDaoImpl]
  }
}

现在使用注射器:

val injector = Guice.createInjector(new DaoModule())
val secondDao = injector.instance[SecondDaoTrait]