Правильно ли я использую PHP-DI?
нет, вы не правильно уловили идею. Передавать весь контейнер в качестве зависимости это нарушение этого самого паттерна и принципа инверсии зависимостей. Так можно делать только в случае циклических зависимостей либо же просто как альтернатива ленивой инициализации сервисов (хотя альтернатива так себе, а циклических зависимостей надо избегать).
1) читаем про принцип инверсии зависимостей
2) читаем про внедрение зависимостей
3) если уж используете безымянные классы то они должны имплементить какой-то интерфейс или же экстендиться от какого-то класса.
Вместо того что вы хотите должно быть:class Foo {
     private $db;

     public function __construct(Connection $connection) {
           $this->db = $connection;
     }

     public function makeFoo() {
          return $this->db->getRows(); // как вы и хотели
     }
}

// а это уже дергаем в конструкторе
$foo = $di->get(Foo::class);
$foo->makeFoo();
то есть в контроллерах мы дожны дернуть сервис который вернет нам готовые данные.
в Falcon успешно используется такой подход docs.phalconphp.ru/ru/latest/reference/di.html