From d09005e5254d81a9cfcfa98a9102bf2f6a8144bd Mon Sep 17 00:00:00 2001 From: Lukas Kahwe Smith Date: Wed, 13 Apr 2011 14:50:49 +0200 Subject: [PATCH] disable interface injection for services where the user has set a manual method call, to allow the end users to keep full control over injection --- .../Component/DependencyInjection/Definition.php | 10 ++++++---- .../DependencyInjection/InterfaceInjector.php | 13 ++++++++++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Definition.php b/src/Symfony/Component/DependencyInjection/Definition.php index 550aa59b20265..8333ab5e27462 100644 --- a/src/Symfony/Component/DependencyInjection/Definition.php +++ b/src/Symfony/Component/DependencyInjection/Definition.php @@ -230,14 +230,15 @@ public function getArguments() * Sets the methods to call after service initialization. * * @param array $calls An array of method calls + * @param boolean $implicit If the method is added implicitly (via interface injection) * * @return Definition The current instance */ - public function setMethodCalls(array $calls = array()) + public function setMethodCalls(array $calls = array(), $implicit = false) { $this->calls = array(); foreach ($calls as $call) { - $this->addMethodCall($call[0], $call[1]); + $this->addMethodCall($call[0], $call[1], $implicit); } return $this; @@ -248,12 +249,13 @@ public function setMethodCalls(array $calls = array()) * * @param string $method The method name to call * @param array $arguments An array of arguments to pass to the method call + * @param boolean $implicit If the method is added implicitly (via interface injection) * * @return Definition The current instance */ - public function addMethodCall($method, array $arguments = array()) + public function addMethodCall($method, array $arguments = array(), $implicit = false) { - $this->calls[] = array($method, $arguments); + $this->calls[] = array($method, $arguments, $implicit); return $this; } diff --git a/src/Symfony/Component/DependencyInjection/InterfaceInjector.php b/src/Symfony/Component/DependencyInjection/InterfaceInjector.php index c403084279956..fc605785d394c 100755 --- a/src/Symfony/Component/DependencyInjection/InterfaceInjector.php +++ b/src/Symfony/Component/DependencyInjection/InterfaceInjector.php @@ -74,12 +74,19 @@ public function processDefinition(Definition $definition, $class = null) return; } + $this->processedDefinitions[] = $definition; + + $calls = $definition->getMethodCalls(); + foreach ($calls as $callback) { + if (empty($callback[2])) { + return; + } + } + foreach ($this->calls as $callback) { list($method, $arguments) = $callback; - $definition->addMethodCall($method, $arguments); + $definition->addMethodCall($method, $arguments, true); } - - $this->processedDefinitions[] = $definition; } /**