Инъекция зависимостей и инициализация объекта

Я довольно новичок в достойном ООП и DI, поэтому было интересно, если следующий пример и его шаблон инициализации моего класса начальной загрузки, который включает в себя зависимые объекты, действительно удобны в использовании, например:

new Session( new Config, new Database ( new Config ), new Page ( new Config ), new Statistics ( new Database ( new Config ) ), new Notification, new Filter ); 

Я считаю, что те, кто знаком с DI, могли что-то сказать о куске кода выше в объекте начальной загрузки?

Это выглядит немного громоздким, но все в порядке? Так ли это, что мы могли бы назвать это хорошо / правильным / приемлемым ?

После некоторого времени изучения исследования по новой проблеме я, наконец, пришел к выводу, что для моего случая лучшим контейнером для инъекций зависимостей будет:

Dice – минималистский контейнер для инъекций для PHP.

У этого есть только один файл, и для того, чтобы иметь код, это из моего вопроса, который будет инициализирован, все, что вам нужно:

 (new Dice)->create('Session'); 

Dice DIC позаботится обо всем остальном. Вы можете прочитать больше о Dice на домашней странице Tom Butler (разработчик).

Я лично считаю, что это лучший (самый короткий и простой) способ инъекции зависимостей и должен быть встроен в PHP по умолчанию, и я действительно задаюсь вопросом, почему это не так?


Чтобы отделить ваш код от конкретного контейнера инъекций зависимостей, я бы рекомендовал использовать специальную оболочку класса:

 class DIC extends Dice { function __construct( $component, array $args = array(), $callback = null, $forceNewInstance = false ) { return parent::create( $component, $args, $callback = null, $forceNewInstance = false ); } } 

что также поможет еще более сократить процесс инициализации, что-то действительно невероятно удивительное.

Теперь, чтобы создать сложные множества DI, например:

 new Session( new Config, new Database ( new Config ), new Page ( new Config ), new Statistics ( new Database ( new Config ) ), new Notification, new Filter ); 

Все, что вам нужно сделать, это:

 new DIC('Session'); 

Если вы хотите передать параметр конструктору, вы можете пойти с:

 new DIC('Session', array($param)); 

Я не знаю, что думают другие, но я нахожу это удивительным (по крайней мере, до сих пор, от того, где я нахожусь сегодня).

Спросите вас, будьте любезны, комментируя возможные недостатки, с которыми я мог столкнуться в будущем, используя эту DIC (Dice) или этот метод в целом !?