http://devdirective.com/post/139/a-look-at-dependency-injection-and-inversion