. * */ namespace Friendica\Core\Hooks\Model; use Dice\Dice; use Friendica\Core\Hooks\Capabilities\ICanCreateInstances; use Friendica\Core\Hooks\Capabilities\ICanRegisterInstances; use Friendica\Core\Hooks\Exceptions\HookInstanceException; use Friendica\Core\Hooks\Exceptions\HookRegisterArgumentException; use Friendica\Core\Hooks\Util\HookFileManager; /** * This class represents an instance register, which uses Dice for creation * * @see Dice */ class DiceInstanceManager implements ICanCreateInstances, ICanRegisterInstances { protected $instance = []; /** @var Dice */ protected $dice; public function __construct(Dice $dice, HookFileManager $hookFileManager) { $this->dice = $dice; $hookFileManager->setupHooks($this); } /** {@inheritDoc} */ public function registerStrategy(string $interface, string $class, ?string $name = null): ICanRegisterInstances { if (!empty($this->instance[$interface][$name])) { throw new HookRegisterArgumentException(sprintf('A class with the name %s is already set for the interface %s', $name, $interface)); } $this->instance[$interface][$name] = $class; return $this; } /** {@inheritDoc} */ public function create(string $class, string $name, array $arguments = []): object { if (empty($this->instance[$class][$name])) { throw new HookInstanceException(sprintf('The class with the name %s isn\'t registered for the class or interface %s', $name, $class)); } return $this->dice->create($this->instance[$class][$name], $arguments); } }