diff --git a/lib/Horde/Registry.php b/lib/Horde/Registry.php index 75019016..aed061b7 100644 --- a/lib/Horde/Registry.php +++ b/lib/Horde/Registry.php @@ -522,10 +522,15 @@ public function __construct($session_flags = 0, array $args = []) /* Save arguments. */ $this->_args = $args; - /* Setup injector. */ + /* Setup injector. Only register the default bindings on an injector we + * created ourselves: registering them again on one handed over by a + * bootstrap shadows instances it already resolved (e.g. SessionLifecycle). */ + $injectorProvided = isset($GLOBALS['injector']); $injector = $GLOBALS['injector'] ??= new Horde_Injector(new Horde_Injector_TopLevel()); - (new \Horde\Core\DefaultInjectorBindings())->register($injector); + if (!$injectorProvided) { + (new \Horde\Core\DefaultInjectorBindings())->register($injector); + } $GLOBALS['registry'] = $this; $injector->setInstance(__CLASS__, $this); diff --git a/src/DefaultInjectorBindings.php b/src/DefaultInjectorBindings.php index 7774ad11..932abcb6 100644 --- a/src/DefaultInjectorBindings.php +++ b/src/DefaultInjectorBindings.php @@ -226,6 +226,7 @@ public function register(Injector $injector): void 'Horde_Perms' => 'Horde_Core_Factory_Perms', 'Horde_Perms_Base' => 'Horde_Core_Factory_Perms', 'Horde_Queue_Storage' => 'Horde_Core_Factory_QueueStorage', + 'Horde_Registry' => [Factory\HordeRegistryFactory::class, 'create'], 'Horde_Routes_Mapper' => 'Horde_Core_Factory_Mapper', HordeRoutesMapper::class => 'Horde_Core_Factory_Mapper', 'Horde_Routes_Matcher' => 'Horde_Core_Factory_Matcher', diff --git a/src/Factory/HordeRegistryFactory.php b/src/Factory/HordeRegistryFactory.php new file mode 100644 index 00000000..3001aa48 --- /dev/null +++ b/src/Factory/HordeRegistryFactory.php @@ -0,0 +1,30 @@ +