Мне кажется, что DI работает только в частных случаях.
Есть у меня такое дело:
class Module_Forum_TopicManager extends Module_Forum_Common implements ModuleInterface
{
protected $external = 'Module_Forum_External';
// …
protected function __construct()
{
$this->boardId = Request::get('boardId'); // жесткая зависимость ? вроде как да
$this->userId = User::instance()->getBaseInfo('id'); // жесткая зависимость ? вроде как да
$this->db = Database::getInstance(); // жесткая зависимость ? вроде как да
$this->f = new Module_Formatter_Class(); // жесткая зависимость ? скорее нет, чем да. Это зависимость не на уровне ядра а на уровне приложения
$this->external = new $this->external; // жесткая зависимость ? как и в предыдущем случае, но тут мы можем повелевать названием класса)
}
Итак, эта хрень вызывается автоматически после распарсивания URL. ModuleInterface содержит __construct и __process
Что дальше? Стало быть я должен добавать N методов в стиле setDatabase(DatabaseInterface $db);?? И каждый раз при запуске модуля отправлять в них данные?
Вот он пишет, что хочу создать инстанцию FileCache и отправить ее в какой-то класс… Зачем? Я бы делал Cache_Files, причем __construct был бы протектед. И только главный класс для работы с кешем мог бы создать его инстанцию. У нас есть Cache, все операции, в т.ч. выбор машины кеширования происходят только через него.