connectionProvider = $connectionProvider; $this->cache = $cache; $this->mediaSubdefFactoryProvider = $mediaSubdefFactoryProvider; } public function createRepositoryFor($databoxId) { $connection = $this->connectionProvider->getConnection($databoxId); $dbalRepository = new DbalMediaSubdefDataRepository($connection); $dataRepository = new CachedMediaSubdefDataRepository($dbalRepository, $this->cache, sprintf('databox%d:', $databoxId)); $provider = $this->mediaSubdefFactoryProvider; $factory = $provider($databoxId); if (!is_callable($factory)) { throw new \UnexpectedValueException(sprintf( 'Media subdef factory is expected to be callable, got %s', is_object($factory) ? get_class($factory) : gettype($factory) )); } return new MediaSubdefRepository($dataRepository, $factory); } }