我使用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来实例化(因此" ???")。我怎么能这样做?
答案 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]