From aae4af9dba95d41dae1038cc03d3f6e3650b1848 Mon Sep 17 00:00:00 2001 From: Phil Bennett Date: Thu, 17 Mar 2016 10:58:58 +0000 Subject: [PATCH] Allow for service providers to be added multiple times by giving them a signature --- CHANGELOG.md | 5 +++ composer.json | 4 +-- .../AbstractSignatureServiceProvider.php | 31 +++++++++++++++++++ .../ServiceProviderAggregate.php | 8 ++--- .../ServiceProviderSignatureInterface.php | 17 ---------- .../SignatureServiceProviderInterface.php | 26 ++++++++++++++++ ...SharedServiceProviderWithSignatureFake.php | 23 +++++--------- 7 files changed, 75 insertions(+), 39 deletions(-) create mode 100644 src/ServiceProvider/AbstractSignatureServiceProvider.php delete mode 100644 src/ServiceProvider/ServiceProviderSignatureInterface.php create mode 100644 src/ServiceProvider/SignatureServiceProviderInterface.php diff --git a/CHANGELOG.md b/CHANGELOG.md index eee7110..cb2a925 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ All Notable changes to `League\Container` will be documented in this file +## 2.2.0 + +### Changed +- Service providers can now be added multiple times by giving them a signature. + ## 2.1.0 ### Added diff --git a/composer.json b/composer.json index dfd097c..26a17b7 100644 --- a/composer.json +++ b/composer.json @@ -45,8 +45,8 @@ }, "extra": { "branch-alias": { - "dev-master": "2.1-dev", - "dev-1.x": "1.5-dev" + "dev-master": "2.x-dev", + "dev-1.x": "1.x-dev" } } } diff --git a/src/ServiceProvider/AbstractSignatureServiceProvider.php b/src/ServiceProvider/AbstractSignatureServiceProvider.php new file mode 100644 index 0000000..9e36b55 --- /dev/null +++ b/src/ServiceProvider/AbstractSignatureServiceProvider.php @@ -0,0 +1,31 @@ +signature = $signature; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getSignature() + { + return (is_null($this->signature)) ? get_class($this) : $this->signature; + } +} diff --git a/src/ServiceProvider/ServiceProviderAggregate.php b/src/ServiceProvider/ServiceProviderAggregate.php index aeac940..74e508b 100644 --- a/src/ServiceProvider/ServiceProviderAggregate.php +++ b/src/ServiceProvider/ServiceProviderAggregate.php @@ -69,11 +69,11 @@ public function register($service) ); } - $provider = $this->providers[$service]; - + $provider = $this->providers[$service]; $signature = get_class($provider); - if ($provider instanceof ServiceProviderSignatureInterface) { - $signature = $provider->signature(); + + if ($provider instanceof SignatureServiceProviderInterface) { + $signature = $provider->getSignature(); } // ensure that the provider hasn't already been invoked by any other service request diff --git a/src/ServiceProvider/ServiceProviderSignatureInterface.php b/src/ServiceProvider/ServiceProviderSignatureInterface.php deleted file mode 100644 index 3618b41..0000000 --- a/src/ServiceProvider/ServiceProviderSignatureInterface.php +++ /dev/null @@ -1,17 +0,0 @@ -item = $item; $this->provides[] = $alias; - $this->signature = $signature; + + $this->withSignature($signature); } public function register() @@ -43,9 +39,4 @@ public function register() return true; } - - public function signature() - { - return $this->signature; - } }