Ik zit te kijken naar dat Guice maar snap niet helemaal wat het grote voordeel is. Ik kijk naar
https://github.com/google/guice/wiki/Motivation Als ik dit zou moeten maken dan zou ik gaan voor de optie die onder Dependency Injection staat. Het mooie is ook dat je in Scala dan simpelweg
class RealBillingService (processor: CreditCardProcessor, transactionLog: TransactionLog) kan doen. Als je in de problemen komt dat de hiërarchie te groot wordt, dan is waarschijnlijk het totale programma te groot aan het worden en kun je het beter opsplitsen in aparte services. Maar desnoods zou je ook wat convenience methods/constructors kunnen maken of er zonder een apart framework omheen kunnen werken.
In mijn opinie is de optie die daaronder staat minder goed leesbaar en Guice is ook niet een heel gebruikelijk framework voor Scala. Als je in main naar de implementatie van de service wil, dan zit er meer kijkwerk tussen terwijl het in de andere variant 1 click is. Als je een parameter toevoegt aan de constructor van RealBillingService krijg je denk ik pas bij het draaien een fout in plaats van bij het compileren. En dat soort foutmeldingen tijdens runtime heb helaas te vaak gezien met dit soort frameworks. Ik zie dus meer nadelen dan voordelen eigenlijk.
Maar misschien is het nuttiger voor frontend-achtige zaken ofzo, en daar gebruiken we geen scala voor. Mocht je willen zien hoe het in Scala wordt gebruikt kijk dan eens naar
https://www.playframework.../ScalaDependencyInjection . Het schijnt ook niet altijd te werken, binnen bijvoorbeeld Spark
werkt het niet zomaar.