Ой, да тему можно было и не открывать, но я могу подвести итог.
Рома, в рамках твоего класса SL, кончено, не нужен, тут я согласен с Никитой.
Но говорить, что SL антипэттерн - глупо, и это уже мое мнение.
Вурдалак путает DIC и DI. Подменяет в своих примерах эти понятия. Отсюда и общее недопонимание.
Ежу понятно что посреди контроллера $container->get('mail') - говнокод, но я не вижу ничего криминального (как и авторы популярных фреймворков, да и просто люди с большим опытом - не вижу ничего зазорного перенимать чужой опыт) использовать SL для крупных компонентов.
PHP:
public function doSmth()
{
$acl = $this->getAcl();
}
/**
* reutrn какойнить интерфейс или обьект
*/
protected function getAcl()
{
return $this->get('security.acl.provider');
}
И yii и yii2 и даже богоугодный symfony2 постоянно используют DIC в качестве SL (и да я подменяю намеренно это понятия, ибо я хз - где можно DIC использовать, кроме как в качестве SL, хотя и можно извратиться)
Чтобы не быть голосовным
yii - 351 раз в ФВ используется Yii::app() (в районе 50 на тесты и в райное 100 на виджеты - их можно не считать)
yii2 - 183 рвза в ФВ используется Yii::$app (тоже довольно много на тесты, виджеты еще не ковырял)
symfony2 - 193 раза в ФВ используется getContainer
И да, я постоянно применяю то, о чем говорю на практике и никаких проблем ни с тестами, ни с автокомплитом ни у кого не было.
Если нужно получить какой-то компонент из SL, то лучше это делать через гетер, тогда все прекрасно мОкается.