1

我正在使用 php-di 6.0.10

我的 DI 配置中有接口实现:

\App\Writer\WriterInterface::class => DI\get(\App\Writer\Text::class)

它有这样的构造函数:

class TextWriter implements WriterInterface
 ... 
public function __construct(Settings $settings, DataConverter $dataConverter, string $filePath)
{
    $this->init($filePath);
    $this->settings = $settings;
    $this->dataConverter = $dataConverter;
}

在我的应用程序中,我想用动态 $filePath 参数实例化编写器:

$this->container->make(WriterInterface::class, ['filePath' => $this->getFilePath()]);

但我得到这个错误:

DI\Definition\Exception\InvalidDefinition:无法解析条目“App\Writer\Text”:__construct() 的参数 $filePath 没有定义的值或可猜测的完整定义:Object ( class = App\Writer\Text lazy = false __construct( $settings = get(App\Settings) $dataConverter = get(App\DataConverter) $filePath = #UNDEFINED#)

怎么了?我深入研究 DI 代码,发现它像 \DI\Definition\SelfResolvingDefinition 一样处理我的定义,并且没有将参数传递给 resolve() 方法。它仅在我明确指定接口实现时才有效 - App\Writer\Text 用于 make() 方法。但我需要有动态接口实现。

如何让它以我想要的方式工作?

4

0 回答 0