PHP -DI конфигурация контейнера - PullRequest
1 голос
/ 20 января 2020

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

Инъекция зависимости, состав root, и точки входа

  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);
    },
];
Что касается DI и концепций автоматического подключения, что, если у меня также была SQLArticleRepository реализация ArticleRepository? Как я могу использовать значение времени выполнения для выбора типа репозитория?

1 Ответ

0 голосов
/ 10 марта 2020

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

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

...