2

我不明白,例如我正在使用 php-di 容器,我有 ClassA 和 ClassB,它们都是实现 Intreface1 我正在通过 DI 创建这两个类的对象

现在,当我将 ClassA 注入构造函数时,我需要准确地注入这个类,它创建了这个 classA 的依赖项,而不是 Intreface1

我可以以某种方式说这个特定的 ClassA 应该实现 intrefeca1 吗?在 PHP-DI 的文档中我发现

  // mapping an interface to an implementation
    'LoggerInterface' => DI\create('MyLogger'),

但我不明白它是如何工作的,LoggerIntreace 它只是一个将此文本映射到对象的字符串

4

1 回答 1

2

您可以“通过接口”注入

以独白和 php-di 为例,你说:

use Monolog\Logger;

use Psr\Log\LoggerInterface;
...
  LoggerInterface::class => \DI\autowire(Logger::class)

现在在你的构造函数中,你可以注入

public function __construct(
        \Psr\Log\LoggerInterface $logger
    ) {

        $this->logger = $logger;
    }
于 2018-08-12T14:20:19.450 回答