Scala依赖注入

时间:2014-08-20 09:49:14

标签: scala dependency-injection

我不是在这里征求意见而是事实

我试图挑选一个新的DI。我和Guice有过一些经历。总的来说,我会说它的一个优点是,当你需要与Java集成时,Guice可以完成这项工作。因此,对于互操作性而言,这是一个明显的优势。

如果我们抛开这个互操作性问题,任何人都可以给我一个简短的比较

scaladi,guice,Macwire?

我仍然擅长了解scaldi。我发现令人惊讶的一件事是必须通过隐式参数在您的注射器周围移动。我几乎没有在guice那样做过。我要么连接我的主要内容,要么使用辅助注入,因此将工厂传递给需要某些特定实例的类。

如果有人可以进一步详细说明该设计选择,我将不胜感激。

非常感谢,

-M -

这是我在macWire上发现的一些奇怪的东西:

trait Interf {
  def name:String
}

class InterfImpl(val name:String) extends Interf

trait AModule {

  import com.softwaremill.macwire.MacwireMacros._


   //lazy val aName: String = "aName"
   lazy val theInterf: Interf = wire[InterfImpl]

}

object injector extends AModule

println(injector.theInterf.name)

我得到一个奇怪的价值。我不知道macWire在那个级别做了什么。我虽然它可能会出现编译错误或其他什么。实际上,我没有给出任何String值。

1 个答案:

答案 0 :(得分:3)

  • Guice:运行时的典型DI(基于反射)
  • Macwire:在编译之前使用Scala宏生成接线(编译时间安全的DI!)
  • scaladi:从来没用过这个

要在Scala中拥有可靠且编译时安全的DI,您还可以使用蛋糕模式(只需google for" scala蛋糕模式")