【发布时间】:2018-10-17 21:51:52
【问题描述】:
我试图弄清楚如何让传统的基于构造函数的依赖注入与类型类模式一起工作。
例如,给定
trait MyTypeClass[A] {
def doSomething(a: A): Unit
}
class TypeClasses(prefix: String) {
implicit val stringTC = new MyTypeClass[String] {
def doSomething(a: String) = println(s"$prefix a")
}
implicit val intTc = new MyTypeClass[Int] {
def doSomething(a: Int) = println(s"s$prefix $a")
}
}
class MyLogic {
def doSomething[A](a: A)(implicit myTypeClass: MyTypeClass[A]) = myTypeClass.doSomething(a)
doSomething("Hello world")
}
将TypeClasses 实例中的隐式类型类实例转换为MyLogic 的最佳方法是什么?
我想出的唯一办法是
a) 将TypeClasses 的实例注入构造函数中的MyLogic,然后注入import instanceOfTypeClasses._。然而,这有一个缺点,它必须在每个类中重复,并且子类不能继承导入。
或 b) 将 TypeClasses 设为 trait,prefix 设为 def,并让 MyLogic 扩展 TypeClasses,然后在构造函数中依赖注入 prefix 的实例。然而,这变得混乱,因为它允许TypeClasses 的依赖关系渗入MyLogic。
【问题讨论】:
标签: scala dependency-injection typeclass