<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <parameters>
        <parameter key="env(SHOPWARE_DBAL_TIMEZONE_SUPPORT_ENABLED)" type="string">0</parameter>
        <parameter key="shopware.dbal.time_zone_support_enabled">%env(bool:SHOPWARE_DBAL_TIMEZONE_SUPPORT_ENABLED)%</parameter>

        <!-- @deprecated tag:v6.8.0 Will be removed -->
        <parameter key="env(SHOPWARE_DBAL_TOKEN_MINIMUM_LENGTH)" type="string">3</parameter>
        <!-- @deprecated tag:v6.8.0 Will be removed -->
        <parameter key="shopware.dbal.token_minimum_length">%env(int:SHOPWARE_DBAL_TOKEN_MINIMUM_LENGTH)%</parameter>
    </parameters>

    <services>
        <service id="Shopware\Core\Framework\DataAbstractionLayer\EntityGenerator"/>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Command\CreateEntitiesCommand">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\EntityGenerator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument>%kernel.project_dir%</argument>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Command\CreateMigrationCommand">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\MigrationQueryGenerator"/>
            <argument type="service" id="kernel"/>
            <argument type="service" id="Symfony\Component\Filesystem\Filesystem"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\MigrationFileRenderer"/>
            <argument>%kernel.shopware_core_dir%</argument>
            <argument>%kernel.shopware_version%</argument>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\SchemaBuilder">
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\MigrationFileRenderer">
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\MigrationQueryGenerator">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\SchemaBuilder"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEventFactory" public="true">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Command\CreateHydratorCommand">
            <tag name="console.command"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument>%kernel.project_dir%</argument>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Cache\EntityCacheKeyGenerator" public="true" />

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper">
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\JoinGroupBuilder" public="true"/>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityHydrator" public="true">
            <argument type="service" id="service_container"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionValidator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\Tokenizer">
            <argument>%shopware.dbal.token_minimum_length%</argument>
            <argument>%shopware.search.preserved_chars%</argument>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\SearchTermInterpreter">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\Tokenizer"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\SearchConfigLoader"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\EntityScoreQueryBuilder"/>

        <service id="Shopware\Core\Content\Product\SearchKeyword\ProductSearchTermInterpreter">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\Tokenizer"/>
            <argument type="service" id="logger"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\Filter\TokenFilter"/>
            <argument type="service" id="Shopware\Core\Content\Product\SearchKeyword\KeywordLoader"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\SearchConfigLoader"/>
        </service>

        <service id="Shopware\Core\Content\Product\SearchKeyword\KeywordLoader">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="api.request_criteria_builder" class="Shopware\Core\Framework\DataAbstractionLayer\Search\RequestCriteriaBuilder">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Parser\AggregationParser"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\ApiCriteriaValidator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\CriteriaArrayConverter"/>
            <argument>%shopware.api.max_limit%</argument>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Search\SearchConfigLoader">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Search\CachedSearchConfigLoader" decorates="Shopware\Core\Framework\DataAbstractionLayer\Search\SearchConfigLoader" decoration-priority="-1000">
            <argument type="service" id=".inner"/>
            <argument type="service" id="cache.object"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Search\CriteriaArrayConverter">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Parser\AggregationParser"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Search\RequestCriteriaBuilder">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Parser\AggregationParser"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\ApiCriteriaValidator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\CriteriaArrayConverter"/>
            <argument>%shopware.api.store.max_limit%</argument>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Search\ApiCriteriaValidator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Search\Parser\AggregationParser"/>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Facade\RepositoryFacadeHookFactory" public="true">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\Script\AppContextCreator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\RequestCriteriaBuilder"/>
            <argument type="service" id="Shopware\Core\Framework\Api\Acl\AclCriteriaValidator"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Facade\RepositoryWriterFacadeHookFactory" public="true">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\Script\AppContextCreator"/>
            <argument type="service" id="Shopware\Core\Framework\Api\Sync\SyncService"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Facade\SalesChannelRepositoryFacadeHookFactory" public="true">
            <argument type="service" id="Shopware\Core\System\SalesChannel\Entity\SalesChannelDefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\RequestCriteriaBuilder"/>
        </service>

        <!-- EntityDefinition[] -->
        <service class="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityReader" id="Shopware\Core\Framework\DataAbstractionLayer\Read\EntityReaderInterface" public="true">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityHydrator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Parser\SqlQueryParser"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\CriteriaQueryBuilder"/>
            <argument type="service" id="logger"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\CriteriaFieldsResolver"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\CriteriaFieldsResolver"/>

        <service class="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityAggregator" id="Shopware\Core\Framework\DataAbstractionLayer\Search\EntityAggregatorInterface" public="true">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\CriteriaQueryBuilder"/>
            <argument>%shopware.dbal.time_zone_support_enabled%</argument>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\SearchTermInterpreter"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\EntityScoreQueryBuilder"/>
        </service>

        <service class="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntitySearcher" id="Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearcherInterface" public="true">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\CriteriaQueryBuilder"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\CriteriaQueryBuilder">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Parser\SqlQueryParser"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\SearchTermInterpreter"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\EntityScoreQueryBuilder"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\JoinGroupBuilder"/>
            <argument type="service"
                      id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldResolver\CriteriaPartResolver"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldResolver\CriteriaPartResolver">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Parser\SqlQueryParser"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" public="true">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\WriteCommandExtractor"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityForeignKeyResolver"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriteGatewayInterface"/>
            <argument type="service" id="Shopware\Core\System\Language\LanguageLoader"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriteResultFactory"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriteResultFactory">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Write\WriteCommandExtractor">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriteGatewayInterface"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
        </service>

        <service class="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityWriteGateway" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriteGatewayInterface" public="true">
            <argument>%shopware.dal.batch_size%</argument>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\ExceptionHandlerRegistry" />
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry" />
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Write\Validation\ConstraintBuilder"/>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Search\Parser\SqlQueryParser">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityForeignKeyResolver">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldResolver\ManyToOneAssociationFieldResolver">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>

            <tag name="shopware.field_resolver" priority="-50"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldResolver\OneToManyAssociationFieldResolver">
            <tag name="shopware.field_resolver" priority="-50"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldResolver\ManyToManyAssociationFieldResolver">
            <tag name="shopware.field_resolver" priority="-50"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldResolver\TranslationFieldResolver">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <tag name="shopware.field_resolver" priority="-50"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldAccessorBuilder\PriceFieldAccessorBuilder">
            <argument type="service" id="Doctrine\DBAL\Connection"/>

            <tag name="shopware.field_accessor_builder" priority="-100"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldAccessorBuilder\JsonFieldAccessorBuilder">
            <argument type="service" id="Doctrine\DBAL\Connection"/>

            <tag name="shopware.field_accessor_builder" priority="-150"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldAccessorBuilder\DefaultFieldAccessorBuilder">
            <tag name="shopware.field_accessor_builder" priority="-200"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldAccessorBuilder\ConfigJsonFieldAccessorBuilder">
            <argument type="service" id="Doctrine\DBAL\Connection"/>

            <tag name="shopware.field_accessor_builder" priority="-100"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldAccessorBuilder\CustomFieldsAccessorBuilder">
            <argument type="service" id="Shopware\Core\System\CustomField\CustomFieldService"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>

            <tag name="shopware.field_accessor_builder" priority="-100"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Version\VersionDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Version\Aggregate\VersionCommit\VersionCommitDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Version\Aggregate\VersionCommitData\VersionCommitDataDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Command\RefreshIndexCommand">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\EntityIndexerRegistry"/>
            <argument type="service" id="event_dispatcher"/>
            <tag name="kernel.event_subscriber"/>
            <tag name="console.command"/>
            <argument type="service" id="messenger.default_bus"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\Subscriber\RegisteredIndexerSubscriber">
            <argument type="service" id="Shopware\Core\Framework\Migration\IndexerQueuer"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\EntityIndexerRegistry"/>

            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Command\DataAbstractionLayerValidateCommand">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionValidator"/>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\VersionManager" public="true">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Read\EntityReaderInterface"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearcherInterface"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriteGatewayInterface"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="serializer"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Version\Aggregate\VersionCommit\VersionCommitDefinition"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Version\Aggregate\VersionCommitData\VersionCommitDataDefinition"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Version\VersionDefinition"/>
            <argument type="service" id="lock.factory"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\CalculatedPriceFieldSerializer">
            <argument type="service" id="validator" />
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\CartPriceFieldSerializer">
            <argument type="service" id="validator" />
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\CashRoundingConfigFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\TaxFreeConfigFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\PriceDefinitionFieldSerializer">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="validator" />
            <argument type="service" id="Shopware\Core\Framework\Rule\Collector\RuleConditionRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\BoolFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\CreatedAtFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\DateFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\DateTimeFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\EmailFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\EnumFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\FkFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\StateMachineStateFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\FloatFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\IdFieldSerializer">
            <argument type="service" id="validator" />
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\IntFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\RemoteAddressFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\JsonFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\ConfigJsonFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\LongTextFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\Util\HtmlSanitizer"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\ListFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\ManyToManyAssociationFieldSerializer">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\WriteCommandExtractor"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\ManyToOneAssociationFieldSerializer">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\WriteCommandExtractor"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\OneToOneAssociationFieldSerializer">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\WriteCommandExtractor"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\BlobFieldSerializer">
            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\OneToManyAssociationFieldSerializer">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\WriteCommandExtractor"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriteGatewayInterface"/>


            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\PasswordFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\PHPUnserializeFieldSerializer">
            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\PriceFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\VariantListingConfigFieldSerializer">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="validator"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\ReferenceVersionFieldSerializer">
            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\StringFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\Util\HtmlSanitizer"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\TranslatedFieldSerializer">
            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\TranslationsAssociationFieldSerializer">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\WriteCommandExtractor"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriteGatewayInterface"/>

            <tag name="shopware.field_serializer" />
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\UpdatedAtFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\VersionDataPayloadFieldSerializer">
            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\VersionFieldSerializer">
            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\CustomFieldsSerializer">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\System\CustomField\CustomFieldService"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\CreatedByFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\UpdatedByFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\TimeZoneFieldSerializer">
            <argument type="service" id="validator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\CronIntervalFieldSerializer">
            <argument type="service" id="validator" />
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\DateIntervalFieldSerializer">
            <argument type="service" id="validator" />
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.field_serializer"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Validation\EntityExistsValidator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearcherInterface"/>

            <tag name="validator.constraint_validator"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Validation\EntityNotExistsValidator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearcherInterface"/>

            <tag name="validator.constraint_validator"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry" public="true">
            <argument type="service" id="service_container" />
            <argument type="collection"/>
            <argument type="collection"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Write\Validation\LockValidator">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Write\Validation\ParentRelationValidator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Framework\Api\Sync\SyncService" public="true">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearcherInterface"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\RequestCriteriaBuilder"/>
            <argument type="service" id="Shopware\Core\Framework\Api\Sync\SyncFkResolver"/>
        </service>

        <service id="Shopware\Core\Framework\Api\Sync\SyncFkResolver">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="tagged_iterator" tag="shopware.sync.fk_resolver"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\ExceptionHandlerRegistry">
            <argument type="tagged_iterator" tag="shopware.dal.exception_handler"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\TechnicalNameExceptionHandler">
            <tag name="shopware.dal.exception_handler"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\EntityProtection\EntityProtectionValidator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\EntityIndexerRegistry" public="true">
            <argument type="tagged_iterator" tag="shopware.entity_indexer"/>
            <argument type="service" id="messenger.default_bus"/>
            <argument type="service" id="event_dispatcher"/>
            <tag name="messenger.message_handler" />
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\Subscriber\EntityIndexingSubscriber" >
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\EntityIndexerRegistry"/>
            <tag name="kernel.event_subscriber" />
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\InheritanceUpdater">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\ChildCountUpdater">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\ManyToManyIdFieldUpdater">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Version\Cleanup\CleanupVersionTask">
            <tag name="shopware.scheduled.task"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Version\Cleanup\CleanupVersionTaskHandler">
            <argument type="service" id="scheduled_task.repository"/>
            <argument type="service" id="logger"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument>%shopware.dal.versioning.expire_days%</argument>
            <tag name="messenger.message_handler"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Telemetry\EntityTelemetrySubscriber">
            <argument type="service" id="Shopware\Core\Framework\Telemetry\Metrics\Meter"/>

            <tag name="kernel.event_subscriber"/>
        </service>
    </services>
</container>
