https://medium.com/@mihaipopa/interview-25-inversion-of-control-and-dependency-injection-in-ios-455b802cfbe3