Я использую codingwell/scala-guice
и пытаюсь ввести DAO-классы в конструкторы других компонентов/классов.Guice in Scala: модуль для класса с самим DI-конструктором
В первой попытке, я использовал только один 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 (поэтому «???»). Как я могу это сделать?
Спасибо, что работает. Таким образом, использование инжектора является альтернативой использованию инъекции конструктора? Потому что я не изменил инсталляцию конструктора и все еще работает. – fxlae
@JFo Это всего лишь один из способов разрешения зависимостей и был самым простым демонстрацией :) –