Конфигурация контейнера PHP-DI

Это продолжение моего предыдущего вопроса (который был плохо определен), который заставил меня понять, что мне нужно больше узнать о DI:

Внедрение зависимостей, корень композиции и точки входа

  1. Может ли кто-нибудь объяснить, какой аспект внедрения зависимостей и связанных с ним концепций имеет место в демо-версии PHP-DI? Какая конфигурация, показанная ниже, даже требуется, если контейнер поддерживает автоматическое подключение?

https://github.com/PHP-DI/demo

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

https://github.com/PHP-DI/demo/blob/master/app/config.php

use function DI\create;
use SuperBlog\Model\ArticleRepository;
use SuperBlog\Persistence\InMemoryArticleRepository;
use Twig\Environment;
use Twig\Loader\FilesystemLoader;

return [
    // Bind an interface to an implementation
    ArticleRepository::class => create(InMemoryArticleRepository::class),

    // Configure Twig
    Environment::class => function () {
        $loader = new FilesystemLoader(__DIR__ . '/../src/SuperBlog/Views');
        return new Environment($loader);
    },
];
  1. Что касается концепций DI и автоматического подключения, что, если бы у меня также была SQLArticleRepository реализация ArticleRepository? Как я могу использовать значение времени выполнения для выбора между типом репозитория?

person Brian    schedule 20.01.2020    source источник


Ответы (1)


проверьте раздел Правила использования контейнера и внедрения зависимостей по этой ссылке http://php-di.org/doc/best-practices.html

Вам необходимо предоставить подсказку типа, которая позволит контейнеру di узнать, какая реализация интерфейса требуется для функции. Также вы должны зарегистрировать/автоматически подключить эту реализацию в контейнере di.

person adil hussain    schedule 10.03.2020