diff --git a/lib/private/servercontainer.php b/lib/private/servercontainer.php index 469fd6475e2e0de6efef49f18f27e4ce3260612c..856e3f9b4956d24ba0865988a6db375c564d4961 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); + } }