首页 > 解决方案 > PHP-DI 容器配置

问题描述

这是我之前的问题(范围很差)的后续问题,这让我意识到我需要了解更多关于 DI 的知识:

依赖注入、组合根和入口点

  1. 有人能解释一下 PHP-DI Demo 中依赖注入的哪些方面和相关概念吗?如果容器支持自动装配,下面显示的配置是什么?

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呢?我如何能够使用运行时值在存储库类型之间进行选择?

标签: phpdependency-injectionphp-di

解决方案


检查 此链接http://php-di.org/doc/best-practices.html中使用容器和依赖注入的规则部分

您需要提供类型提示,让 di 容器知道该函数需要什么接口实现。此外,您还必须在 di 容器中注册/自动装配该实现。


推荐阅读