Я читал эту статью несколько раз:
http://jonasboner.com/2008/10/06/real-world-scala-dependency-injection-di.html
Я думаю что я понимаю. Однако есть кое-что, чего я не совсем понимаю.
Глядя на его пример UserService, я вижу, что он настроил UserRepositoryComponent для инкапсуляции UserRepository. Но я не понимаю, почему UserRepositoryComponent играет две роли: он инкапсулирует UserRepository, а также предлагает ссылку на объект UserRepository.
Я пытаюсь представить, как бы я использовал этот шаблон, если бы хотел создать службу, которая зависит от двух экземпляров UserRepository. Возможно, задача нового сервиса - копировать пользователей из «источника» UserRepository в "целевой" UserRepository. Итак, я представляю себе что-то вроде этого:
trait CopyUserServiceComponent {
val source: UserRepositoryComponent
val destination: UserRepositoryComponent
class CopyUserServiceComponent {
...
}
}
Но это отличается от исходного шаблона. В этом случае я определяю зависимости в самом компоненте, вместо того, чтобы наследовать их от какого-либо другого компонента. Но мне кажется, что это правильный способ сделать это: компоненты должны объявлять свои зависимости, а не экземпляры своих включенных служб.
Что мне здесь не хватает?