https://ones.com/blog/knowledge/mastering-dependency-injection-guide-loosely-coupled-code/