protect(function ($databoxId) use ($app) { return function ($recordId, array $data) use ($app, $databoxId) { $recordReference = RecordReference::createFromDataboxIdAndRecordId($databoxId, $recordId); return new \caption_record($app, $recordReference, $data); }; }); $app['provider.data_repo.caption'] = $app->share(function (Application $app) { return new DataboxBoundRepositoryProvider(new CaptionDataRepositoryFactory( new DataboxConnectionProvider($app['phraseanet.appbox']), $app['cache'] )); }); $app['provider.repo.caption'] = $app->share(function (Application $app) { return new DataboxBoundRepositoryProvider( new ClosureDataboxBoundRepositoryFactory(function ($databoxId) use ($app) { /** @var CaptionDataRepository $dataRepository */ $dataRepository = $app['provider.data_repo.caption']->getRepositoryForDatabox($databoxId); $captionFactoryProvider = $app['provider.factory.caption']; return new CaptionRepository( $dataRepository, $captionFactoryProvider($databoxId) ); }) ); }); $app['service.caption'] = $app->share(function (Application $app) { return new CaptionService($app['provider.repo.caption']); }); } public function boot(Application $app) { $app['dispatcher']->addSubscriber(new CaptionCacheInvalider(new LazyLocator($app, 'provider.data_repo.caption'))); } }