summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2015-07-24 13:11:32 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2015-07-24 13:11:32 +0200
commit1f8ee61006a7b3dcc740cb16e5d826fa7c1646c6 (patch)
tree99b20a3014691fb114ca92054550a5f1f2d70a8f /lib
parentf558b3071fd327ed46f7e6cc3068f261572df453 (diff)
parenta4e39392047c5c49042a0666296efb276c0f88e9 (diff)
downloadnextcloud-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.php50
-rw-r--r--lib/private/appframework/utility/simplecontainer.php41
-rw-r--r--lib/public/icontainer.php15
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);
}