From c5ab74348c01593e3f0c3a05701b224b019ecd87 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 5 Mar 2019 17:55:35 +0100 Subject: [PATCH] Avoid duplicate App container creation Signed-off-by: Joas Schilling --- lib/private/ServerContainer.php | 13 +++++++++++++ lib/public/AppFramework/App.php | 7 ++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/private/ServerContainer.php b/lib/private/ServerContainer.php index e1447d2f06b..4c8107fe1be 100644 --- a/lib/private/ServerContainer.php +++ b/lib/private/ServerContainer.php @@ -71,6 +71,19 @@ class ServerContainer extends SimpleContainer { $this->appContainers[strtolower(App::buildAppNamespace($appName, ''))] = $container; } + /** + * @param string $appName + * @return DIContainer + * @throws QueryException + */ + public function getRegisteredAppContainer(string $appName) { + if (isset($this->appContainers[strtolower(App::buildAppNamespace($appName, ''))])) { + return $this->appContainers[strtolower(App::buildAppNamespace($appName, ''))]; + } + + throw new QueryException(); + } + /** * @param string $namespace * @param string $sensitiveNamespace diff --git a/lib/public/AppFramework/App.php b/lib/public/AppFramework/App.php index b6ed2da5076..06524e4bf02 100644 --- a/lib/public/AppFramework/App.php +++ b/lib/public/AppFramework/App.php @@ -66,11 +66,16 @@ class App { /** + * @param string $appName * @param array $urlParams an array with variables extracted from the routes * @since 6.0.0 */ public function __construct(string $appName, array $urlParams = []) { - $this->container = new \OC\AppFramework\DependencyInjection\DIContainer($appName, $urlParams); + try { + $this->container = \OC::$server->getRegisteredAppContainer($appName); + } catch (QueryException $e) { + $this->container = new \OC\AppFramework\DependencyInjection\DIContainer($appName, $urlParams); + } } /**