From: Joas Schilling Date: Fri, 18 Dec 2015 10:44:10 +0000 (+0100) Subject: Look up services in the app container before trying the core container X-Git-Tag: v9.0beta1~452^2~2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1f197134c87836167142cc766bdaab572fb73b8d;p=nextcloud-server.git Look up services in the app container before trying the core container --- diff --git a/lib/private/servercontainer.php b/lib/private/servercontainer.php index 469fd6475e2..856e3f9b495 100644 --- a/lib/private/servercontainer.php +++ b/lib/private/servercontainer.php @@ -62,4 +62,28 @@ class ServerContainer extends SimpleContainer { return new DIContainer($appName); } + + /** + * @param string $name name of the service to query for + * @return mixed registered service for the given $name + * @throws QueryException if the query could not be resolved + */ + public function query($name) { + $name = $this->sanitizeName($name); + + // In case the service starts with OCA\ we try to find the service in + // the apps container first. + if (strpos($name, 'OCA\\') === 0 && substr_count($name, '\\') >= 2) { + $segments = explode('\\', $name); + $appContainer = $this->getAppContainer(strtolower($segments[0])); + try { + return $appContainer->query($name); + } catch (QueryException $e) { + // Didn't find the service in the respective app container, + // ignore it and fall back to the core container. + } + } + + return parent::query($name); + } }