使用 DI\create()
您可以使用CreateDefinitionHelper::method在创建对象时定义方法调用。像这样:
$this->container = new \DI\Container();
$this->container->set('AdyenClient',
\DI\create('\Adyen\Client')->method('configClient', $param1, $param2));
$this->container->set('AdyenCheckout',
\DI\create('\Adyen\Service\Checkout')->constructor($this->container->get('AdyenClient')));
PHP-DI 将在首次创建后使用 $param1 和 $param2 调用 AdyenClient::configClient。
使用 DI\factory()
或者,您可以使用该DI\factory
函数(从回调创建FactoryDefinitionHelper ):
$this->container = new \DI\Container();
$this->container->set('AdyenClient',
\DI\factory(function (Psr\Container\ContainerInterface $container) {
$adyenClient = $container->get('\Adyen\Client');
configClient($adyenClient);
return $adyenClient;
});
$this->container->set('AdyenCheckout',
\DI\create('\Adyen\Service\Checkout')->constructor($this->container->get('AdyenClient')));
这应该是一种更灵活的方式来定义容器中的任何延迟加载的东西。