diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2015-07-24 13:11:32 +0200 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2015-07-24 13:11:32 +0200 |
commit | 1f8ee61006a7b3dcc740cb16e5d826fa7c1646c6 (patch) | |
tree | 99b20a3014691fb114ca92054550a5f1f2d70a8f /lib | |
parent | f558b3071fd327ed46f7e6cc3068f261572df453 (diff) | |
parent | a4e39392047c5c49042a0666296efb276c0f88e9 (diff) | |
download | nextcloud-server-1f8ee61006a7b3dcc740cb16e5d826fa7c1646c6.tar.gz nextcloud-server-1f8ee61006a7b3dcc740cb16e5d826fa7c1646c6.zip |
Merge pull request #17755 from owncloud/alias-container-alive
Add registerAlias method to shortcut interface registration #17714
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/appframework/dependencyinjection/dicontainer.php | 50 | ||||
-rw-r--r-- | lib/private/appframework/utility/simplecontainer.php | 41 | ||||
-rw-r--r-- | lib/public/icontainer.php | 15 |
3 files changed, 55 insertions, 51 deletions
diff --git a/lib/private/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php index a11e4ee05b3..c7ce6545972 100644 --- a/lib/private/appframework/dependencyinjection/dicontainer.php +++ b/lib/private/appframework/dependencyinjection/dicontainer.php @@ -39,8 +39,6 @@ use OC\AppFramework\Middleware\Security\SecurityMiddleware; use OC\AppFramework\Middleware\Security\CORSMiddleware; use OC\AppFramework\Middleware\SessionMiddleware; use OC\AppFramework\Utility\SimpleContainer; -use OC\AppFramework\Utility\TimeFactory; -use OC\AppFramework\Utility\ControllerMethodReflector; use OCP\AppFramework\IApi; use OCP\AppFramework\IAppContainer; use OCP\AppFramework\Middleware; @@ -63,15 +61,9 @@ class DIContainer extends SimpleContainer implements IAppContainer { $this['urlParams'] = $urlParams; // aliases - $this->registerService('appName', function($c) { - return $c->query('AppName'); - }); - $this->registerService('webRoot', function($c) { - return $c->query('WebRoot'); - }); - $this->registerService('userId', function($c) { - return $c->query('UserId'); - }); + $this->registerAlias('appName', 'AppName'); + $this->registerAlias('webRoot', 'WebRoot'); + $this->registerAlias('userId', 'UserId'); /** * Core services @@ -156,9 +148,8 @@ class DIContainer extends SimpleContainer implements IAppContainer { return $this->getServer()->getJobList(); }); - $this->registerService('OCP\\AppFramework\\Utility\\IControllerMethodReflector', function($c) { - return $c->query('ControllerMethodReflector'); - }); + $this->registerAlias('OCP\\AppFramework\\Utility\\IControllerMethodReflector', 'OC\AppFramework\Utility\ControllerMethodReflector'); + $this->registerAlias('ControllerMethodReflector', 'OCP\\AppFramework\\Utility\\IControllerMethodReflector'); $this->registerService('OCP\\INavigationManager', function($c) { return $this->getServer()->getNavigationManager(); @@ -168,9 +159,10 @@ class DIContainer extends SimpleContainer implements IAppContainer { return $this->getServer()->getPreviewManager(); }); - $this->registerService('OCP\\IRequest', function($c) { - return $c->query('Request'); + $this->registerService('OCP\\IRequest', function () { + return $this->getServer()->getRequest(); }); + $this->registerAlias('Request', 'OCP\\IRequest'); $this->registerService('OCP\\ITagManager', function($c) { return $this->getServer()->getTagManager(); @@ -180,9 +172,9 @@ class DIContainer extends SimpleContainer implements IAppContainer { return $this->getServer()->getTempManager(); }); - $this->registerService('OCP\\AppFramework\\Utility\\ITimeFactory', function($c) { - return $c->query('TimeFactory'); - }); + $this->registerAlias('OCP\\AppFramework\\Utility\\ITimeFactory', 'OC\AppFramework\Utility\TimeFactory'); + $this->registerAlias('TimeFactory', 'OCP\\AppFramework\\Utility\\ITimeFactory'); + $this->registerService('OCP\\Route\\IRouter', function($c) { return $this->getServer()->getRouter(); @@ -245,14 +237,6 @@ class DIContainer extends SimpleContainer implements IAppContainer { return new API($c['AppName']); }); - $this->registerService('Request', function($c) { - /** @var $c SimpleContainer */ - /** @var $server SimpleContainer */ - $server = $c->query('ServerContainer'); - /** @var $server IServerContainer */ - return $server->getRequest(); - }); - $this->registerService('Protocol', function($c){ if(isset($_SERVER['SERVER_PROTOCOL'])) { return new Http($_SERVER, $_SERVER['SERVER_PROTOCOL']); @@ -318,18 +302,6 @@ class DIContainer extends SimpleContainer implements IAppContainer { return $dispatcher; }); - - /** - * Utilities - */ - $this->registerService('TimeFactory', function($c){ - return new TimeFactory(); - }); - - $this->registerService('ControllerMethodReflector', function($c) { - return new ControllerMethodReflector(); - }); - } diff --git a/lib/private/appframework/utility/simplecontainer.php b/lib/private/appframework/utility/simplecontainer.php index 5a69d3dbbd2..c1fc96d1975 100644 --- a/lib/private/appframework/utility/simplecontainer.php +++ b/lib/private/appframework/utility/simplecontainer.php @@ -26,21 +26,28 @@ namespace OC\AppFramework\Utility; -use \OCP\AppFramework\QueryException; +use ReflectionClass; +use ReflectionException; +use Closure; + +use Pimple\Container; + +use OCP\AppFramework\QueryException; +use OCP\IContainer; /** * Class SimpleContainer * - * SimpleContainer is a simple implementation of IContainer on basis of \Pimple + * SimpleContainer is a simple implementation of IContainer on basis of Pimple */ -class SimpleContainer extends \Pimple\Container implements \OCP\IContainer { +class SimpleContainer extends Container implements IContainer { /** - * @param \ReflectionClass $class the class to instantiate - * @return \stdClass the created class + * @param ReflectionClass $class the class to instantiate + * @return stdClass the created class */ - private function buildClass(\ReflectionClass $class) { + private function buildClass(ReflectionClass $class) { $constructor = $class->getConstructor(); if ($constructor === null) { return $class->newInstance(); @@ -67,20 +74,20 @@ class SimpleContainer extends \Pimple\Container implements \OCP\IContainer { * If a parameter is not registered in the container try to instantiate it * by using reflection to find out how to build the class * @param string $name the class name to resolve - * @return \stdClass + * @return stdClass * @throws QueryException if the class could not be found or instantiated */ private function resolve($name) { $baseMsg = 'Could not resolve ' . $name . '!'; try { - $class = new \ReflectionClass($name); + $class = new ReflectionClass($name); if ($class->isInstantiable()) { return $this->buildClass($class); } else { throw new QueryException($baseMsg . ' Class can not be instantiated'); } - } catch(\ReflectionException $e) { + } catch(ReflectionException $e) { throw new QueryException($baseMsg . ' ' . $e->getMessage()); } } @@ -117,10 +124,10 @@ class SimpleContainer extends \Pimple\Container implements \OCP\IContainer { * Created instance will be cached in case $shared is true. * * @param string $name name of the service to register another backend for - * @param \Closure $closure the closure to be called on service creation + * @param Closure $closure the closure to be called on service creation * @param bool $shared */ - public function registerService($name, \Closure $closure, $shared = true) { + public function registerService($name, Closure $closure, $shared = true) { if (isset($this[$name])) { unset($this[$name]); } @@ -131,5 +138,17 @@ class SimpleContainer extends \Pimple\Container implements \OCP\IContainer { } } + /** + * Shortcut for returning a service from a service under a different key, + * e.g. to tell the container to return a class when queried for an + * interface + * @param string $alias the alias that should be registered + * @param string $target the target that should be resolved instead + */ + public function registerAlias($alias, $target) { + $this->registerService($alias, function (IContainer $container) use ($target) { + return $container->query($target); + }); + } } diff --git a/lib/public/icontainer.php b/lib/public/icontainer.php index 35bf6a76ce8..75ff5e97b69 100644 --- a/lib/public/icontainer.php +++ b/lib/public/icontainer.php @@ -30,6 +30,9 @@ // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP; +use Closure; + + /** * Class IContainer * @@ -72,5 +75,15 @@ interface IContainer { * @return void * @since 6.0.0 */ - public function registerService($name, \Closure $closure, $shared = true); + public function registerService($name, Closure $closure, $shared = true); + + /** + * Shortcut for returning a service from a service under a different key, + * e.g. to tell the container to return a class when queried for an + * interface + * @param string $alias the alias that should be registered + * @param string $target the target that should be resolved instead + * @since 8.2.0 + */ + public function registerAlias($alias, $target); } |