connectionProvider = $connectionProvider; $this->cache = $cache; $this->captionFactoryProvider = $captionFactoryProvider; } public function createRepositoryFor($databoxId) { $connection = $this->connectionProvider->getConnection($databoxId); $dbalRepository = new DbalCaptionDataRepository($connection); $dataRepository = new CachedCaptionDataRepository($dbalRepository, $this->cache, sprintf('databox[%d]:', $databoxId)); $provider = $this->captionFactoryProvider; $factory = $provider($databoxId); if (!is_callable($factory)) { throw new \UnexpectedValueException(sprintf( 'Caption factory is expected to be callable, got %s', is_object($factory) ? get_class($factory) : gettype($factory) )); } return new CaptionRepository($dataRepository, $factory); } }