нет, вы не правильно уловили идею. Передавать весь контейнер в качестве зависимости это нарушение этого самого паттерна и принципа инверсии зависимостей. Так можно делать только в случае циклических зависимостей либо же просто как альтернатива ленивой инициализации сервисов (хотя альтернатива так себе, а циклических зависимостей надо избегать).
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();
то есть в контроллерах мы дожны дернуть сервис который вернет нам готовые данные.