Scala中的Guice:一个具有DI构造函数的类的模块

时间:2016-04-18 17:43:01

标签: scala dependency-injection guice

我使用codingwell/scala-guice并尝试将DAO类注入其他组件/类的构造函数。

在第一次尝试中,我只使用了一个DAO类来查看它是否有效:

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

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

在第二步中,我想向模块添加另一个DAO类。但是,DAO级依赖于第一个DAO:

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

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

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

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

1 个答案:

答案 0 :(得分:2)

使用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]