extensionAttributesFactory = $extensionAttributesFactory; $this->objectManager = $objectManager; $this->contextParametersProcessors = $contextParametersProcessors; } /** * @inheritdoc */ public function create(?UserContextInterface $userContext = null): ContextInterface { $contextParameters = $this->objectManager->create(ContextParametersInterface::class); foreach ($this->contextParametersProcessors as $contextParametersProcessor) { if (!$contextParametersProcessor instanceof ContextParametersProcessorInterface) { throw new LocalizedException( __('ContextParametersProcessors must implement %1', ContextParametersProcessorInterface::class) ); } if ($contextParametersProcessor instanceof UserContextParametersProcessorInterface) { $contextParametersProcessor->setUserContext( $userContext ?? $this->objectManager->create(UserContextInterface::class) ); } $contextParameters = $contextParametersProcessor->execute($contextParameters); } $extensionAttributes = $this->extensionAttributesFactory->create( ContextInterface::class, [ 'data' => $contextParameters->getExtensionAttributesData(), ] ); $context = $this->objectManager->create( ContextInterface::class, [ 'userType' => $contextParameters->getUserType(), 'userId' => $contextParameters->getUserId(), 'extensionAttributes' => $extensionAttributes, ] ); $this->context = $context; return $context; } /** * @inheritdoc */ public function get(): ContextInterface { if (!$this->context) { $this->create(); } return $this->context; } /** * @inheritDoc */ public function _resetState(): void { $this->context = null; } }