Skip to content

Commit

Permalink
Zend\Di new feature: ability to mark types as not-shared (always new …
Browse files Browse the repository at this point in the history
…instances)
  • Loading branch information
Ralph Schindler committed Mar 17, 2012
1 parent b95fca2 commit 4b2ec0c
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 4 deletions.
4 changes: 4 additions & 0 deletions library/Zend/Di/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@ public function configureInstance(Di $di, $instanceData)
case 'injection':
$im->setInjections($target, $v);
break;
case 'shared':
case 'share':
$im->setShared($target, $v);
break;
}
}
}
Expand Down
1 change: 1 addition & 0 deletions library/Zend/Di/Definition/Builder/PhpClass.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ class PhpClass
protected $name = null;
protected $instantiator = '__construct';
protected $injectionMethods = array();
protected $superTypes = array();

public function setName($name)
{
Expand Down
10 changes: 7 additions & 3 deletions library/Zend/Di/Di.php
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,6 @@ protected function resolveMethodParameters($class, $method, array $callTimeUserP
// PRIORITY 1 - consult user provided parameters
if (isset($callTimeUserParams[$fqParamPos]) || isset($callTimeUserParams[$name])) {

// @todo FQ Name in call time params
if (isset($callTimeUserParams[$fqParamPos])) {
$callTimeCurValue =& $callTimeUserParams[$fqParamPos];
} elseif (isset($callTimeUserParams[$fqParamName])) {
Expand Down Expand Up @@ -501,7 +500,6 @@ protected function resolveMethodParameters($class, $method, array $callTimeUserP
|| isset($iConfig[$thisIndex]['parameters'][$fqParamName])
|| isset($iConfig[$thisIndex]['parameters'][$name])) {

// @todo FQ Name in config parameters
if (isset($iConfig[$thisIndex]['parameters'][$fqParamPos])) {
$iConfigCurValue =& $iConfig[$thisIndex]['parameters'][$fqParamPos];
} elseif (isset($iConfig[$thisIndex]['parameters'][$fqParamName])) {
Expand Down Expand Up @@ -602,7 +600,13 @@ protected function resolveMethodParameters($class, $method, array $callTimeUserP
);
}
array_push($this->currentDependencies, $class);
$resolvedParams[$index] = $this->get($computedParams['required'][$fqParamPos][0], $callTimeUserParams);
$dConfig = $this->instanceManager->getConfiguration($computedParams['required'][$fqParamPos][0]);
if ($dConfig['shared'] == false) {
$resolvedParams[$index] = $this->newInstance($computedParams['required'][$fqParamPos][0], $callTimeUserParams, false);
} else {
$resolvedParams[$index] = $this->get($computedParams['required'][$fqParamPos][0], $callTimeUserParams);
}

array_pop($this->currentDependencies);

} elseif (!array_key_exists($fqParamPos, $computedParams['optional'])) {
Expand Down
11 changes: 10 additions & 1 deletion library/Zend/Di/InstanceManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ class InstanceManager /* implements InstanceCollection */
* injection type => array of ordered method params
*/
'injections' => array(),
/**
* alias|class => bool
*/
'shared' => true
);

/**
Expand Down Expand Up @@ -240,6 +244,7 @@ public function setConfiguration($aliasOrClass, array $configuration, $append =
$configuration = array(
'parameters' => isset($configuration['parameters']) ? $configuration['parameters'] : array(),
'injections' => isset($configuration['injections']) ? $configuration['injections'] : array(),
'shared' => isset($configuration['shared']) ? $configuration['shared'] : array(),
);
$this->configurations[$key] = array_replace_recursive($this->configurations[$key], $configuration);
}
Expand Down Expand Up @@ -287,7 +292,11 @@ public function setInjections($aliasOrClass, array $injections)
{
return $this->setConfiguration($aliasOrClass, array('injections' => $injections), true);
}


public function setShared($aliasOrClass, $isShared)
{
return $this->setConfiguration($aliasOrClass, array('shared' => $isShared), true);
}

public function hasTypePreferences($interfaceOrAbstract)
{
Expand Down

0 comments on commit 4b2ec0c

Please sign in to comment.