scala中的依赖注入

时间:2017-07-05 16:30:33

标签: scala dependency-injection

我有一个特质

trait Tt[T]{
   //tens of methods
}

class St{ tt: Tt[T] =>
  type T = //...
  //some methods
}

object St{
    def apply[T](tt: Tt[T]) = new St with tt //error
}

问题是Tt的对象是由库生成的。有没有办法避免实现所有这几十种方法而只是注入实例"?

我不能只将它作为参数传递,因为在类中定义的类型变量声明。

无法将类型变量声明提取到type参数。

1 个答案:

答案 0 :(得分:2)

class St(val tt: Tt[St#T]) { type T = ... }

怎么样?

您的apply还有其他内容:St希望Tt的类型参数与其自己的类型T相同(您必须开始为这些类型使用更多字母),但apply使用T参数化,这是另一种不同的类型,恰好使用相同的字母。因此,def apply[T](tt: Tt[T]) = new St(tt)不会编译,它必须是def apply(tt: Tt(St#T)) = new St(tt)