Можно сказать, что Scala поддерживает внедрение зависимостей из коробки с помощью черт и аннотаций самостоятельного типа. Посмотрите на Торт Выкройки:
http://jonasboner.com/2008/10/06/real-world-scala-dependency-injection-di/
В основном, этот подход использует черты с объявленными зависимостями (используя self-типы), чтобы позволить компилятору выполнить их соединение.
Это реестр деклараций:
object ComponentRegistry extends
UserServiceComponent with
UserRepositoryComponent
{
val userRepository = new UserRepository
val userService = new UserService
}
... регистрация репозитория пользователя:
trait UserRepositoryComponent {
val userRepository: UserRepository
class UserRepository {
...
}
}
... и компонент службы пользователя, который зависит от хранилища:
trait UserServiceComponent {
this: UserRepositoryComponent =>
val userService: UserService
class UserService {
...
}
}