【发布时间】:2010-11-02 15:06:25
【问题描述】:
这篇文章我已经读了好几遍了:
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 {
...
}
}
但这与原来的模式不同。在这种情况下,我在组件本身中定义依赖项,而不是从其他组件继承它们。但在我看来,这似乎是正确的做法:组件应该声明它们的依赖关系,而不是它们包含的服务的实例。
我在这里错过了什么?
【问题讨论】:
-
实际上我认为“源”和“目标”应该是 UserRepository 类型,而不是 UserRepositoryComponent ......但为了让他们这样做,他们需要通过继承将 UserRepository 纳入范围以某种方式来自 UserRepositoryComponent...,然后 CopyUserServiceComponent 最终会得到一个从 UserRepositoryComponent 获得的无关 UserRepository。
标签: scala dependency-injection