diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
index 51a234a288388..59b7a24385993 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
@@ -68,6 +68,11 @@ public function load(array $configs, ContainerBuilder $container)
if ($container->hasParameter('kernel.debug') && $container->getParameter('kernel.debug')) {
$loader->load('security_debug.xml');
+
+ if ($container->hasDefinition('security.access.decision_manager') && $container->hasDefinition('debug.security.access.decision_manager')) {
+ $container->getDefinition('security.access.decision_manager')->setAutowiringTypes(array());
+ $container->getDefinition('debug.security.access.decision_manager')->setAutowiringTypes(array('Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface'));
+ }
}
if (!class_exists('Symfony\Component\ExpressionLanguage\ExpressionLanguage')) {
diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml
index c34453cb3854f..0b869f6a74af0 100644
--- a/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml
+++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml
@@ -66,6 +66,8 @@
+
+ Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AutowiringTypesTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AutowiringTypesTest.php
new file mode 100644
index 0000000000000..99fd16fa705f3
--- /dev/null
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AutowiringTypesTest.php
@@ -0,0 +1,41 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bundle\SecurityBundle\Tests\Functional;
+
+use Symfony\Component\Security\Core\Authorization\AccessDecisionManager;
+use Symfony\Component\Security\Core\Authorization\DebugAccessDecisionManager;
+
+class AutowiringTypesTest extends WebTestCase
+{
+ public function testAccessDecisionManagerAutowiring()
+ {
+ static::bootKernel(array('debug' => false));
+ $container = static::$kernel->getContainer();
+
+ $accessDecisionManager = $container->get('test.autowiring_types.autowired_services')->getAccessDecisionManager();
+ $this->assertInstanceOf(AccessDecisionManager::class, $accessDecisionManager);
+ }
+
+ public function testDebugAccessDecisionManagerAutowiring()
+ {
+ static::bootKernel(array('debug' => true));
+ $container = static::$kernel->getContainer();
+
+ $accessDecisionManager = $container->get('test.autowiring_types.autowired_services')->getAccessDecisionManager();
+ $this->assertInstanceOf(DebugAccessDecisionManager::class, $accessDecisionManager);
+ }
+
+ protected static function createKernel(array $options = array())
+ {
+ return parent::createKernel(array('test_case' => 'AutowiringTypes') + $options);
+ }
+}
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/AutowiringTypes/AutowiredServices.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/AutowiringTypes/AutowiredServices.php
new file mode 100644
index 0000000000000..eabae2332ab96
--- /dev/null
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/AutowiringTypes/AutowiredServices.php
@@ -0,0 +1,29 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bundle\SecurityBundle\Tests\Functional\Bundle\TestBundle\AutowiringTypes;
+
+use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
+
+class AutowiredServices
+{
+ private $accessDecisionManager;
+
+ public function __construct(AccessDecisionManagerInterface $accessDecisionManager)
+ {
+ $this->accessDecisionManager = $accessDecisionManager;
+ }
+
+ public function getAccessDecisionManager()
+ {
+ return $this->accessDecisionManager;
+ }
+}
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/TestBundle.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/TestBundle.php
new file mode 100644
index 0000000000000..d2af1a40ff215
--- /dev/null
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/TestBundle.php
@@ -0,0 +1,18 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bundle\SecurityBundle\Tests\Functional\Bundle\TestBundle;
+
+use Symfony\Component\HttpKernel\Bundle\Bundle;
+
+class TestBundle extends Bundle
+{
+}
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/bundles.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/bundles.php
new file mode 100644
index 0000000000000..b254425b54352
--- /dev/null
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/bundles.php
@@ -0,0 +1,16 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+return array(
+ new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
+ new Symfony\Bundle\SecurityBundle\SecurityBundle(),
+ new Symfony\Bundle\SecurityBundle\Tests\Functional\Bundle\TestBundle\TestBundle(),
+);
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/config.yml b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/config.yml
new file mode 100644
index 0000000000000..3f54991ef2bab
--- /dev/null
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/config.yml
@@ -0,0 +1,18 @@
+imports:
+ - { resource: ../config/framework.yml }
+
+
+security:
+ providers:
+ in_memory:
+ memory: ~
+
+ firewalls:
+ test:
+ pattern: ^/
+ security: false
+
+services:
+ test.autowiring_types.autowired_services:
+ class: Symfony\Bundle\SecurityBundle\Tests\Functional\Bundle\TestBundle\AutowiringTypes\AutowiredServices
+ autowire: true