除了Java之外,我仍处于学习scala的起点,但我不明白应该如何在其中进行DI?我可以还是应该使用现有的DI库,应该手动完成还是有其他方法?
Answers:
标准Java DI框架通常可以与Scala一起使用,但是您也可以使用语言构造来实现相同的效果,而无需外部依赖。
我自己还没有这样做,但是大多数DI框架都在字节码级别(AFAIK)上工作,因此应该可以将它们与任何JVM语言一起使用。
先前的文章介绍了这些技术。我想添加一个链接到Martin Odersky在2014年5月关于Scala语言目标的演讲。他确定了“需要” DI容器以注入依赖关系的语言,这些语言实施得不好。我个人对此表示赞同,但这只是一个意见。似乎确实表明在Scala项目中包括DI依赖项是非习惯性的,但这再次是意见。实际上,即使使用旨在本机注入依赖关系的语言,使用容器也可以获得一定程度的一致性。出于您的目的,这两种观点都值得考虑。
除了Dan Story的答案外,我在博客中还介绍了一个DI变体,该变体也仅使用语言构造,但在Jonas的文章“特质的价值注入”(现在链接到web.archive.org)中未提及。这种模式对我来说非常有效。