[ 'factories' => [ EntityManager::class => Factory\EntityManagerFactory::class, GuzzleClient::class => InvokableFactory::class, Cache::class => Factory\CacheFactory::class, Filesystem::class => InvokableFactory::class, Reader::class => ConfigAbstractFactory::class, Translator::class => Factory\TranslatorFactory::class, Template\Extension\TranslatorExtension::class => ConfigAbstractFactory::class, Middleware\LocaleMiddleware::class => ConfigAbstractFactory::class, Middleware\CloseDbConnectionMiddleware::class => ConfigAbstractFactory::class, IpAddress::class => Middleware\IpAddressMiddlewareFactory::class, Image\ImageBuilder::class => Image\ImageBuilderFactory::class, IpGeolocation\IpApiLocationResolver::class => ConfigAbstractFactory::class, IpGeolocation\GeoLite2LocationResolver::class => ConfigAbstractFactory::class, IpGeolocation\EmptyIpLocationResolver::class => InvokableFactory::class, IpGeolocation\ChainIpLocationResolver::class => ConfigAbstractFactory::class, IpGeolocation\GeoLite2\GeoLite2Options::class => ConfigAbstractFactory::class, IpGeolocation\GeoLite2\DbUpdater::class => ConfigAbstractFactory::class, Service\PreviewGenerator::class => ConfigAbstractFactory::class, ], 'aliases' => [ 'em' => EntityManager::class, 'httpClient' => GuzzleClient::class, 'translator' => Translator::class, 'logger' => LoggerInterface::class, Logger::class => 'Logger_Shlink', LoggerInterface::class => 'Logger_Shlink', IpGeolocation\IpLocationResolverInterface::class => IpGeolocation\ChainIpLocationResolver::class, ], 'abstract_factories' => [ Factory\DottedAccessConfigAbstractFactory::class, ], 'delegators' => [ // The GeoLite2 db reader has to be lazy so that it does not try to load the DB file at app bootstrapping. // By doing so, it would fail the first time shlink tries to download it. Reader::class => [ LazyServiceFactory::class, ], ], 'lazy_services' => [ 'class_map' => [ Reader::class => Reader::class, ], ], ], ConfigAbstractFactory::class => [ Reader::class => ['config.geolite2.db_location'], Template\Extension\TranslatorExtension::class => ['translator'], Middleware\LocaleMiddleware::class => ['translator'], Middleware\CloseDbConnectionMiddleware::class => ['em'], IpGeolocation\IpApiLocationResolver::class => ['httpClient'], IpGeolocation\GeoLite2LocationResolver::class => [Reader::class], IpGeolocation\ChainIpLocationResolver::class => [ IpGeolocation\GeoLite2LocationResolver::class, IpGeolocation\IpApiLocationResolver::class, IpGeolocation\EmptyIpLocationResolver::class, ], IpGeolocation\GeoLite2\GeoLite2Options::class => ['config.geolite2'], IpGeolocation\GeoLite2\DbUpdater::class => [ GuzzleClient::class, Filesystem::class, IpGeolocation\GeoLite2\GeoLite2Options::class, ], Service\PreviewGenerator::class => [ Image\ImageBuilder::class, Filesystem::class, 'config.preview_generation.files_location', ], ], ];