https://justhackem.wordpress.com/2016/05/14/inversion-of-control/