1. Что-то Вы напутали, в Вашем примере нет DI. Принцип
Dependency Injection говорит нам что классы не должны зависеть от реализации конкретных объектов, они должны зависеть от интерфейсов. В Вашем же случае интерфейсов нет, класс DB зависит от реализации класса Config - что само по себе являет нарушением принципа инверсии зависимости. По сути дела Ваш код сейчас - это реализация принципа
Inversion of Control и не более..
2. Как сказал
index0h не стоит использовать публичные свойства - эта плохая практика. Почему так не стоит делать - можно почитать в интернете, об этом написано не мало статей
3. Класс NeedDB как-то не понятно сделан. какое его назначение? создать объекты? тогда лучше использовать
фабрику, либо
Service Locator, либо
Dependency Injection Container