如何解决自动装配如何知道要通过哪个类?
我使用 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 举报,一经查实,本站将立刻删除。