微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自动装配如何知道要通过哪个类?

如何解决自动装配如何知道要通过哪个类?

我使用 LoggerInterface 进行了依赖注入,例如:

// src/Service/MessageGenerator.PHP
namespace App\Service;
use Psr\Log\LoggerInterface;

class MessageGenerator
{
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function getHappyMessage(): string
    {
        $this->logger->info('About to find a happy message!');
        // ...
    }
}

当我在控制器中实例化 MessageGenerator 时,会以某种方式传递 $logger 变量,如果是这样的话

public function __construct(Logger $logger)

而不是

public function __construct(LoggerInterface $logger)

很明显它应该实例化 Logger 类对象,但是它如何处理 LoggerInterface ,如果有多个实现 LoggerInterface 的类,它通过哪个类/p>

解决方法

LoggerInterface 是 Symfony 容器中的键,它指向该容器中的特定类。您可以使用命令 php bin/console debug:autowiring 查看哪些键与类匹配 这里有更多说明: https://symfony.com/doc/current/service_container.html#fetching-and-using-services

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。