From a6a9cfe592ee35636b0a76a43c3eb26bf8af70e2 Mon Sep 17 00:00:00 2001 From: "aidan.casey" Date: Tue, 18 Aug 2026 20:49:17 -0400 Subject: [PATCH] feat: allows `get` to resolve services as singletons --- packages/container/src/Container.php | 7 +++++++ packages/container/src/GenericContainer.php | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/packages/container/src/Container.php b/packages/container/src/Container.php index dba11e198..fcaa68e37 100644 --- a/packages/container/src/Container.php +++ b/packages/container/src/Container.php @@ -20,6 +20,13 @@ public function singleton(string $className, mixed $definition, string|UnitEnum| public function config(object $config): self; + /** + * @template TClassName of object + * @param class-string $className + * @return TClassName + */ + public function make(string $className, mixed ...$params): mixed; + /** * @template TClassName of object * @param class-string $className diff --git a/packages/container/src/GenericContainer.php b/packages/container/src/GenericContainer.php index 752fca8f2..402ec0bde 100644 --- a/packages/container/src/GenericContainer.php +++ b/packages/container/src/GenericContainer.php @@ -54,6 +54,8 @@ public function __construct( private(set) ArrayIterator $resettables = new ArrayIterator(), private(set) ?DependencyChain $chain = null, + + private(set) bool $getClassAsSingletonByDefault = false, ) { $this->singleton(Container::class, $this); $this->singleton(ContainerInterface::class, $this); @@ -198,6 +200,17 @@ public function config(object $config): self return $this; } + /** + * @template TClassName of object + * @param class-string $className + * @return TClassName + * @throws CircularDependencyEncountered + */ + public function make(string $className, ...$params): mixed + { + return $this->resolve($className, null, ...$params); + } + /** * @template TClassName of object * @param class-string $className @@ -213,6 +226,10 @@ public function get(string $className, string|UnitEnum|null $tag = null, mixed . $this->stopChain(); + if ($this->getClassAsSingletonByDefault) { + $this->singleton($className, $dependency, $tag); + } + return $dependency; }