【发布时间】:2014-05-11 02:56:51
【问题描述】:
考虑这样一种情况,我有一个具有多个实现的接口,每个实现在我的应用程序中的正常部署中都是活动的。举个更具体的例子,我们可以认为这些是Notifier接口的实现,其中有PushNotifier、EmailNotifier和SmsNotifier。
在 Java 中,使用 Spring,我将所有 3 个注入到一个类中,并创建一个 Map<NotificationType, Notifier>,我可以使用它来获取特定类型通知的通知器。
我想知道在 Scala 中做同样事情的最佳模式是什么。我见过的大多数事情都暗示了模式匹配:
notificationType match {
case Push => pushNotifier.notify
case Email => emailNotifier.notify
// ...
}
但这似乎有点违背了 DI/IoC 的目的。然而,没有一个主要的 Scala DI 框架提供了一个很好的机制来将同一接口的多个实现作为一个列表注入(实际上,我现在在 Scala 中使用 Spring - 但试图避免大多数疯狂的功能并只使用它用于基本接线)
有没有我没有掌握的更类似于 Scala 的模式?
【问题讨论】:
-
也许这是因为我从未使用过 DI 框架,但我不清楚最终目标是什么。为什么需要测试这是哪种类型的通知器?为什么不让它成为一个黑盒特征呢?
-
@Owen 我有多个 trait 实现,每个都处理不同类型的通知。还有其他方法可以处理这个问题,但使用地图是性能最高的方法(而不是使用
supports方法或我在每次迭代中调用的类似方法)
标签: scala dependency-injection