|
15 | 15 | use Psr\Container\ContainerInterface;
|
16 | 16 | use Symfony\Component\Config\FileLocator;
|
17 | 17 | use Symfony\Component\DependencyInjection\Alias;
|
| 18 | +use Symfony\Component\DependencyInjection\Argument\BoundArgument; |
18 | 19 | use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
|
19 | 20 | use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
|
20 | 21 | use Symfony\Component\DependencyInjection\ChildDefinition;
|
|
50 | 51 | use Symfony\Component\DependencyInjection\Tests\Fixtures\TaggedLocatorConsumerWithDefaultIndexMethodAndWithDefaultPriorityMethod;
|
51 | 52 | use Symfony\Component\DependencyInjection\Tests\Fixtures\TaggedLocatorConsumerWithDefaultPriorityMethod;
|
52 | 53 | use Symfony\Component\DependencyInjection\Tests\Fixtures\TaggedLocatorConsumerWithoutIndex;
|
| 54 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\TaggedLocatorConsumerWithServiceSubscriber; |
53 | 55 | use Symfony\Component\DependencyInjection\Tests\Fixtures\TaggedService1;
|
54 | 56 | use Symfony\Component\DependencyInjection\Tests\Fixtures\TaggedService2;
|
55 | 57 | use Symfony\Component\DependencyInjection\Tests\Fixtures\TaggedService3;
|
@@ -1118,6 +1120,66 @@ public function testTaggedIteratorAndLocatorWithExclude()
|
1118 | 1120 | $this->assertTrue($locator->has(AutoconfiguredService2::class));
|
1119 | 1121 | $this->assertFalse($locator->has(TaggedConsumerWithExclude::class));
|
1120 | 1122 | }
|
| 1123 | + |
| 1124 | + public function testAutowireAttributeHasPriorityOverBindings() |
| 1125 | + { |
| 1126 | + $container = new ContainerBuilder(); |
| 1127 | + $container->register(FooTagClass::class) |
| 1128 | + ->setPublic(true) |
| 1129 | + ->addTag('foo_bar', ['key' => 'tagged_service']) |
| 1130 | + ; |
| 1131 | + $container->register(TaggedLocatorConsumerWithServiceSubscriber::class) |
| 1132 | + ->setBindings([ |
| 1133 | + '$locator' => new BoundArgument(new Reference('service_container'), false), |
| 1134 | + ]) |
| 1135 | + ->setPublic(true) |
| 1136 | + ->setAutowired(true) |
| 1137 | + ->addTag('container.service_subscriber') |
| 1138 | + ; |
| 1139 | + $container->register('subscribed_service', \stdClass::class) |
| 1140 | + ->setPublic(true) |
| 1141 | + ; |
| 1142 | + |
| 1143 | + $container->compile(); |
| 1144 | + |
| 1145 | + /** @var TaggedLocatorConsumerWithServiceSubscriber $s */ |
| 1146 | + $s = $container->get(TaggedLocatorConsumerWithServiceSubscriber::class); |
| 1147 | + |
| 1148 | + self::assertInstanceOf(ContainerInterface::class, $subscriberLocator = $s->getContainer()); |
| 1149 | + self::assertTrue($subscriberLocator->has('subscribed_service')); |
| 1150 | + self::assertNotSame($subscriberLocator, $taggedLocator = $s->getLocator()); |
| 1151 | + self::assertInstanceOf(ContainerInterface::class, $taggedLocator); |
| 1152 | + self::assertTrue($taggedLocator->has('tagged_service')); |
| 1153 | + } |
| 1154 | + |
| 1155 | + public function testBindingsWithAutowireAttributeAndAutowireFalse() |
| 1156 | + { |
| 1157 | + $container = new ContainerBuilder(); |
| 1158 | + $container->register(FooTagClass::class) |
| 1159 | + ->setPublic(true) |
| 1160 | + ->addTag('foo_bar', ['key' => 'tagged_service']) |
| 1161 | + ; |
| 1162 | + $container->register(TaggedLocatorConsumerWithServiceSubscriber::class) |
| 1163 | + ->setBindings([ |
| 1164 | + '$locator' => new BoundArgument(new Reference('service_container'), false), |
| 1165 | + ]) |
| 1166 | + ->setPublic(true) |
| 1167 | + ->setAutowired(false) |
| 1168 | + ->addTag('container.service_subscriber') |
| 1169 | + ; |
| 1170 | + $container->register('subscribed_service', \stdClass::class) |
| 1171 | + ->setPublic(true) |
| 1172 | + ; |
| 1173 | + |
| 1174 | + $container->compile(); |
| 1175 | + |
| 1176 | + /** @var TaggedLocatorConsumerWithServiceSubscriber $s */ |
| 1177 | + $s = $container->get(TaggedLocatorConsumerWithServiceSubscriber::class); |
| 1178 | + |
| 1179 | + self::assertNull($s->getContainer()); |
| 1180 | + self::assertInstanceOf(ContainerInterface::class, $taggedLocator = $s->getLocator()); |
| 1181 | + self::assertSame($container, $taggedLocator); |
| 1182 | + } |
1121 | 1183 | }
|
1122 | 1184 |
|
1123 | 1185 | class ServiceSubscriberStub implements ServiceSubscriberInterface
|
|
0 commit comments