Dependency injection is a mechanism that defines how parts of your program should access other parts of the same program or external resources.
Let's consider a scenario where dependency injection becomes relevant. For example, consider you are writing an application with a database for a bank. The application will include methods for reading and writing the objects of your business domain into the database. For example, you may have a method to create a new user and a method to create a new account for them. These methods depend on the connection to the database. One way to inject this dependency is to pass the database connection object into the methods as arguments:
def createUser(u: User, c: Connection): Int = ???
def createAccount(a: Account, c: Connection): Int = ???
The preceding types are defined as follows:
class Connection
case class User(id: Option[Int], name...