Configure service container to support parsers and ParserSelector
This commit is contained in:
parent
5a2c7eea97
commit
eeef06f6d9
|
@ -2,11 +2,18 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Command\WorkerParseCommand;
|
||||
use App\Contract\Config\AppParameters;
|
||||
use App\Contract\Config\AppTags;
|
||||
use App\Contract\Service\Parser\ParserInterface;
|
||||
use App\Service\ParserSelector;
|
||||
use App\Service\Serializer;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symfony\Component\Serializer\SerializerInterface;
|
||||
|
||||
use function Symfony\Component\DependencyInjection\Loader\Configurator\env;
|
||||
use function Symfony\Component\DependencyInjection\Loader\Configurator\tagged_iterator;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator) {
|
||||
$containerConfigurator->import(
|
||||
resource: __DIR__ . '/packages/*.php',
|
||||
|
@ -27,6 +34,9 @@ return static function (ContainerConfigurator $containerConfigurator) {
|
|||
$defaultsConfigurator->autowire(autowired: true);
|
||||
$defaultsConfigurator->autoconfigure(autoconfigured: true);
|
||||
|
||||
$instanceofConfigurator = $defaultsConfigurator->instanceof(fqcn: ParserInterface::class);
|
||||
$instanceofConfigurator->tag(name: AppTags::PARSER);
|
||||
|
||||
$prototypeConfigurator = $servicesConfigurator->load(
|
||||
namespace: 'App\\',
|
||||
resource: __DIR__ . '/../src/',
|
||||
|
@ -45,4 +55,12 @@ return static function (ContainerConfigurator $containerConfigurator) {
|
|||
$prototypeConfigurator->tag(name: 'controller.service_arguments');
|
||||
|
||||
$servicesConfigurator->set(id: Serializer::class)->decorate(id: SerializerInterface::class);
|
||||
|
||||
$serviceConfigurator = $servicesConfigurator->set(id: ParserSelector::class);
|
||||
$serviceConfigurator->arg(key: '$parsers', value: tagged_iterator(tag: AppTags::PARSER));
|
||||
|
||||
$serviceConfigurator = $servicesConfigurator->set(id: WorkerParseCommand::class);
|
||||
$serviceConfigurator->arg(key: '$batchSize', value: env(name: 'APP_WORKER_PARSER_BATCH_SIZE')->int());
|
||||
$serviceConfigurator->arg(key: '$maxIterations', value: env(name: 'APP_WORKER_PARSER_MAX_ITERATIONS')->int());
|
||||
$serviceConfigurator->arg(key: '$maxDurationStr', value: env(name: 'APP_WORKER_PARSER_MAX_DURATION'));
|
||||
};
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Contract\Config;
|
||||
|
||||
// TODO convert to native enums when PHP 8.1 is available on production
|
||||
final class AppTags
|
||||
{
|
||||
public const PARSER = 'app.parser';
|
||||
}
|
Reference in New Issue