Skip to content

Commit ae60e27

Browse files
committed
ContainerBuilder::addDefinition(null) adds anonymous service
1 parent ca1089a commit ae60e27

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

src/DI/ContainerBuilder.php

+8-1
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,15 @@ class ContainerBuilder
5656
/**
5757
* Adds new service definition.
5858
*/
59-
public function addDefinition(string $name, ServiceDefinition $definition = null): ServiceDefinition
59+
public function addDefinition(?string $name, ServiceDefinition $definition = null): ServiceDefinition
6060
{
61+
if ($name === null) {
62+
$name = count($this->definitions) + 1;
63+
while (isset($this->definitions[$name])) {
64+
$name++;
65+
}
66+
}
67+
6168
$this->classListNeedsRefresh = true;
6269
if (!$name) { // builder is not ready for falsy names such as '0'
6370
throw new Nette\InvalidArgumentException(sprintf('Service name must be a non-empty string, %s given.', gettype($name)));

tests/DI/ContainerBuilder.basic5.phpt

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Nette\DI;
6+
use Tester\Assert;
7+
8+
9+
require __DIR__ . '/../bootstrap.php';
10+
11+
12+
$builder = new DI\ContainerBuilder;
13+
$builder->addDefinition('1')
14+
->setFactory('stdClass');
15+
$builder->addDefinition(null)
16+
->setFactory('stdClass');
17+
18+
19+
$container = createContainer($builder);
20+
21+
Assert::type(stdClass::class, $container->getService('1'));
22+
Assert::type(stdClass::class, $container->getService('2'));

0 commit comments

Comments
 (0)