Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Make service not shared when prototype scope is set
  • Loading branch information
wouterj committed Jun 24, 2015
1 parent 50e752b commit b7030cc
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 1 deletion.
4 changes: 4 additions & 0 deletions src/Symfony/Component/DependencyInjection/Definition.php
Expand Up @@ -649,6 +649,10 @@ public function setScope($scope, $triggerDeprecationError = true)
@trigger_error('The '.__METHOD__.' method is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED);
}

if (ContainerInterface::SCOPE_PROTOTYPE === $scope) {
$this->setShared(false);
}

$this->scope = $scope;

return $this;
Expand Down
13 changes: 13 additions & 0 deletions src/Symfony/Component/DependencyInjection/Tests/DefinitionTest.php
Expand Up @@ -12,6 +12,7 @@
namespace Symfony\Component\DependencyInjection\Tests;

use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\ContainerInterface;

class DefinitionTest extends \PHPUnit_Framework_TestCase
{
Expand Down Expand Up @@ -139,6 +140,18 @@ public function testSetIsShared()
$this->assertFalse($def->isShared(), '->isShared() returns false if the instance must not be shared');
}

/**
* @group legacy
*/
public function testPrototypeScopedDefinitionAreNotShared()
{
$def = new Definition('stdClass');
$def->setScope(ContainerInterface::SCOPE_PROTOTYPE);

$this->assertFalse($def->isShared());
$this->assertEquals(ContainerInterface::SCOPE_PROTOTYPE, $def->getScope());
}

/**
* @covers Symfony\Component\DependencyInjection\Definition::setScope
* @covers Symfony\Component\DependencyInjection\Definition::getScope
Expand Down
Expand Up @@ -33,6 +33,6 @@
<configurator class="%baz_class%" method="configureStatic1"/>
</service>
<service id="factory_service" class="Bar" factory-method="getInstance" factory-service="foo.baz"/>
<service id="foo_bar" class="%foo_class%" scope="prototype"/>
<service id="foo_bar" class="%foo_class%" shared="false" scope="prototype"/>
</services>
</container>
Expand Up @@ -29,4 +29,5 @@ services:
factory_service: foo.baz
foo_bar:
class: %foo_class%
shared: false
scope: prototype

0 comments on commit b7030cc

Please sign in to comment.