diff --git a/CHANGELOG.md b/CHANGELOG.md index 00d33475..3f1d8bdb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 1.3.1 under development - New #380: Add `TagReference::id()` method (@vjik) +- Enh #384: Make `$config` parameter in `Container` constructor optional (@np25071984) ## 1.3.0 October 14, 2024 diff --git a/src/Container.php b/src/Container.php index f8cb2864..6f4b7f91 100644 --- a/src/Container.php +++ b/src/Container.php @@ -74,8 +74,10 @@ final class Container implements ContainerInterface * * @throws InvalidConfigException If configuration is not valid. */ - public function __construct(ContainerConfigInterface $config) + public function __construct(?ContainerConfigInterface $config = null) { + $config ??= ContainerConfig::create(); + $this->definitions = new DefinitionStorage( [ ContainerInterface::class => $this, diff --git a/tests/Unit/CompositePsrContainerOverYiisoftTest.php b/tests/Unit/CompositePsrContainerOverYiisoftTest.php index 568aa243..5cdc5890 100644 --- a/tests/Unit/CompositePsrContainerOverYiisoftTest.php +++ b/tests/Unit/CompositePsrContainerOverYiisoftTest.php @@ -110,9 +110,9 @@ public function testNotFoundException(): void { $compositeContainer = new CompositeContainer(); - $container1 = new Container(ContainerConfig::create()); + $container1 = new Container(); $container1Id = spl_object_id($container1); - $container2 = new Container(ContainerConfig::create()); + $container2 = new Container(); $container2Id = spl_object_id($container2); $compositeContainer->attach($container1); diff --git a/tests/Unit/CompositePsrContainerTestAbstract.php b/tests/Unit/CompositePsrContainerTestAbstract.php index d72e1f2d..76f820dc 100644 --- a/tests/Unit/CompositePsrContainerTestAbstract.php +++ b/tests/Unit/CompositePsrContainerTestAbstract.php @@ -136,7 +136,7 @@ public function testTags(): void public function testDelegateLookup(): void { $compositeContainer = new CompositeContainer(); - $firstContainer = new Container(ContainerConfig::create()); + $firstContainer = new Container(); $config = ContainerConfig::create() ->withDefinitions([ @@ -155,7 +155,7 @@ public function testDelegateLookup(): void public function testDelegateLookupUnionTypes(): void { $compositeContainer = new CompositeContainer(); - $firstContainer = new Container(ContainerConfig::create()); + $firstContainer = new Container(); $config = ContainerConfig::create() ->withDefinitions([ diff --git a/tests/Unit/ContainerTest.php b/tests/Unit/ContainerTest.php index e8020664..5a7672c6 100644 --- a/tests/Unit/ContainerTest.php +++ b/tests/Unit/ContainerTest.php @@ -60,6 +60,13 @@ */ final class ContainerTest extends TestCase { + public function testCanCreateWihtoutConfig(): void + { + $this->expectNotToPerformAssertions(); + + new Container(); + } + public function testSettingScalars(): void { $this->expectException(InvalidConfigException::class); @@ -89,7 +96,7 @@ public function testIntegerKeys(): void public function testNullableClassDependency(): void { - $container = new Container(ContainerConfig::create()); + $container = new Container(); $this->expectException(NotFoundException::class); $container->get(NullableConcreteDependency::class); @@ -111,7 +118,7 @@ public function testOptionalResolvableClassDependency(): void public function testOptionalNotResolvableClassDependency(): void { - $container = new Container(ContainerConfig::create()); + $container = new Container(); $this->assertTrue($container->has(OptionalConcreteDependency::class)); $service = $container->get(OptionalConcreteDependency::class); @@ -168,14 +175,14 @@ public static function dataUnionTypes(): array #[DataProvider('dataUnionTypes')] public function testUnionTypes(string $class): void { - $container = new Container(ContainerConfig::create()); + $container = new Container(); $this->assertTrue($container->has($class)); } public function testClassExistsButIsNotResolvable(): void { - $container = new Container(ContainerConfig::create()); + $container = new Container(); $this->assertFalse($container->has('non_existing')); $this->assertFalse($container->has(Car::class)); @@ -195,14 +202,14 @@ public static function dataClassExistButIsNotResolvableWithUnionTypes(): array #[DataProvider('dataClassExistButIsNotResolvableWithUnionTypes')] public function testClassExistButIsNotResolvableWithUnionTypes(string $class): void { - $container = new Container(ContainerConfig::create()); + $container = new Container(); $this->assertFalse($container->has($class)); } public function testWithoutDefinition(): void { - $container = new Container(ContainerConfig::create()); + $container = new Container(); $hasEngine = $container->has(EngineMarkOne::class); $this->assertTrue($hasEngine); @@ -213,7 +220,7 @@ public function testWithoutDefinition(): void public function testCircularClassDependencyWithoutDefinition(): void { - $container = new Container(ContainerConfig::create()); + $container = new Container(); $this->expectException(CircularReferenceException::class); $container->get(Chicken::class); } @@ -612,7 +619,7 @@ public function testFalsePositiveCircularReferenceWithClassID(): void { $this->expectNotToPerformAssertions(); - $container = new Container(ContainerConfig::create()); + $container = new Container(); // Build an object $container->get(ColorPink::class); @@ -639,7 +646,7 @@ public function testFalsePositiveCircularReferenceWithStringID(): void { $this->expectNotToPerformAssertions(); - $container = new Container(ContainerConfig::create()); + $container = new Container(); try { // Build an object $container->get('test'); @@ -948,7 +955,7 @@ public function testThrowingNotFoundException(): void { $this->expectException(NotFoundException::class); - $container = new Container(ContainerConfig::create()); + $container = new Container(); $container->get('non_existing'); } @@ -1233,16 +1240,16 @@ public function testNewContainerDefinitionInDelegates(): void $config = ContainerConfig::create() ->withDefinitions([ - ContainerInterface::class => new Container(ContainerConfig::create()), + ContainerInterface::class => new Container(), ]) ->withDelegates([ function (ContainerInterface $container) use (&$firstContainer): ContainerInterface { $firstContainer = $container; - return new Container(ContainerConfig::create()); + return new Container(); }, function (ContainerInterface $container) use (&$secondContainer): ContainerInterface { $secondContainer = $container; - return new Container(ContainerConfig::create()); + return new Container(); }, ]); $originalContainer = new Container($config); @@ -1619,7 +1626,7 @@ public function testDifferentContainerWithProviders(): void public function getDefinitions(): array { return [ - ContainerInterface::class => static fn (ContainerInterface $container) => new Container(ContainerConfig::create()), + ContainerInterface::class => static fn (ContainerInterface $container) => new Container(), ]; } diff --git a/tests/Unit/ServiceProviderTest.php b/tests/Unit/ServiceProviderTest.php index 73007e5b..f9bb181c 100644 --- a/tests/Unit/ServiceProviderTest.php +++ b/tests/Unit/ServiceProviderTest.php @@ -66,7 +66,7 @@ private function ensureProviderRegisterExtensions($provider): void private function ensureProviderRegisterDefinitions($provider): void { - $container = new Container(ContainerConfig::create()); + $container = new Container(); $this->assertFalse( $container->has(Car::class),