I just sort of saw the light with it over the last year, after struggling with the concepts for 3-4 years. I don't use a DI container, just Poor Man's Injection. Currently struggling with a legacy project that is a mixture of "We don't use DI" and "We have a DI container that we pass as an argument to some classes".