<?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">

    <services>
        <service id="Shopware\Core\Content\Product\DataAbstractionLayer\ProductExceptionHandler">
            <tag name="shopware.dal.exception_handler"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Sorting\ProductSortingExceptionHandler">
            <tag name="shopware.dal.exception_handler"/>
        </service>

        <service id="Shopware\Core\Content\Product\ProductDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductStreamMapping\ProductStreamMappingDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\SalesChannelProductDefinition">
            <tag name="shopware.sales_channel.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductCategory\ProductCategoryDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductCustomFieldSet\ProductCustomFieldSetDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductTag\ProductTagDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductConfiguratorSetting\ProductConfiguratorSettingDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductConfiguratorSetting\ProductConfiguratorSettingExceptionHandler">
            <tag name="shopware.dal.exception_handler"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductPrice\ProductPriceDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductProperty\ProductPropertyDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductSearchKeyword\ProductSearchKeywordDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductKeywordDictionary\ProductKeywordDictionaryDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductReview\ProductReviewDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductManufacturer\ProductManufacturerDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductManufacturerTranslation\ProductManufacturerTranslationDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductMedia\ProductMediaDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductDownload\ProductDownloadDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductTranslation\ProductTranslationDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductOption\ProductOptionDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductCategoryTree\ProductCategoryTreeDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductCrossSelling\ProductCrossSellingDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductCrossSellingTranslation\ProductCrossSellingTranslationDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductCrossSellingAssignedProducts\ProductCrossSellingAssignedProductsDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductFeatureSet\ProductFeatureSetDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductFeatureSetTranslation\ProductFeatureSetTranslationDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Sorting\ProductSortingDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Sorting\ProductSortingTranslationDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductSearchConfig\ProductSearchConfigDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductSearchConfigField\ProductSearchConfigFieldDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductSearchConfigField\ProductSearchConfigFieldExceptionHandler">
            <tag name="shopware.dal.exception_handler"/>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductSearchConfig\ProductSearchConfigExceptionHandler">
            <tag name="shopware.dal.exception_handler"/>
        </service>

        <service id="Shopware\Core\Content\Product\Cart\ProductGateway">
            <argument type="service" id="sales_channel.product.repository"/>
            <argument type="service" id="event_dispatcher"/>
        </service>

        <service id="Shopware\Core\Content\Product\AbstractPropertyGroupSorter" class="Shopware\Core\Content\Product\PropertyGroupSorter"/>

        <service id="Shopware\Core\Content\Product\AbstractProductMaxPurchaseCalculator" class="Shopware\Core\Content\Product\ProductMaxPurchaseCalculator">
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
        </service>

        <service id="Shopware\Core\Content\Product\AbstractIsNewDetector" class="Shopware\Core\Content\Product\IsNewDetector">
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
        </service>

        <service id="Shopware\Core\Content\Product\ProductVariationBuilder"/>

        <service id="Shopware\Core\Content\Product\Subscriber\ProductSubscriber">
            <argument type="service" id="Shopware\Core\Content\Product\ProductVariationBuilder"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Price\ProductPriceCalculator"/>
            <argument type="service" id="Shopware\Core\Content\Product\AbstractPropertyGroupSorter"/>
            <argument type="service" id="Shopware\Core\Content\Product\AbstractProductMaxPurchaseCalculator"/>
            <argument type="service" id="Shopware\Core\Content\Product\AbstractIsNewDetector"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="Shopware\Core\Content\Product\Stock\StockStorage"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Content\Product\Stock\OrderStockSubscriber">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Content\Product\Stock\StockStorage"/>
            <argument>%shopware.stock.enable_stock_management%</argument>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Content\Product\Stock\AvailableStockMirrorSubscriber">
            <tag name="kernel.event_listener"/>
        </service>

        <service id="Shopware\Core\Content\Product\Stock\LoadProductStockSubscriber">
            <argument type="service" id="Shopware\Core\Content\Product\Stock\StockStorage"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Content\Product\SearchKeyword\ProductSearchKeywordAnalyzer">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\Tokenizer"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\Filter\TokenFilter"/>
        </service>

        <service id="Shopware\Core\Content\Product\Api\ProductActionController" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\Util\VariantCombinationLoader"/>
            <call method="setContainer">
                <argument type="service" id="service_container"/>
            </call>
        </service>

        <service id="Shopware\Core\Content\Product\Aggregate\ProductVisibility\ProductVisibilityDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

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

        <service id="Shopware\Core\System\DeliveryTime\DeliveryTimeDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Content\Product\Cms\ProductBoxCmsElementResolver">
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <tag name="shopware.cms.data_resolver" />
        </service>

        <service id="Shopware\Core\Content\Product\Cms\ProductListingCmsElementResolver">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingRoute" />
            <argument type="service" id="product_sorting.repository" />
            <tag name="shopware.cms.data_resolver" />
        </service>

        <service id="Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver">
            <argument type="service" id="Shopware\Core\Content\ProductStream\Service\ProductStreamBuilder"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <tag name="shopware.cms.data_resolver"/>
        </service>

        <service id="Shopware\Core\Content\Product\Cms\ProductNameCmsElementResolver">
            <tag name="shopware.cms.data_resolver" />
        </service>

        <service id="Shopware\Core\Content\Product\Cms\ManufacturerLogoCmsElementResolver">
            <tag name="shopware.cms.data_resolver" />
        </service>

        <service id="Shopware\Core\Content\Product\Cms\CrossSellingCmsElementResolver">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\CrossSelling\ProductCrossSellingRoute"/>
            <tag name="shopware.cms.data_resolver"/>
        </service>

        <service id="Shopware\Core\Content\Product\Cms\ProductDescriptionReviewsCmsElementResolver">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Review\ProductReviewRoute"/>
            <tag name="shopware.cms.data_resolver"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Price\ProductPriceCalculator">
            <argument type="service" id="unit.repository"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\Price\QuantityPriceCalculator"/>

            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Price\AppScriptProductPriceCalculator" decorates="Shopware\Core\Content\Product\SalesChannel\Price\ProductPriceCalculator">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Price\AppScriptProductPriceCalculator.inner"/>
            <argument type="service" id="Shopware\Core\Framework\Script\Execution\ScriptExecutor"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\Facade\ScriptPriceStubs"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\Processor\CompositeListingProcessor">
            <argument type="tagged_iterator" tag="shopware.listing.processor" />
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\Filter\ManufacturerListingFilterHandler" />

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\Filter\PriceListingFilterHandler" />

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\Filter\RatingListingFilterHandler"/>

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\Filter\ShippingFreeListingFilterHandler"/>

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\Filter\PropertyListingFilterHandler">
            <argument type="service" id="property_group_option.repository"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <instanceof id="Shopware\Core\Content\Product\SalesChannel\Listing\Filter\AbstractListingFilterHandler">
            <tag name="shopware.listing.filter.handler" />
        </instanceof>

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\Processor\SortingListingProcessor">
            <tag name="shopware.listing.processor"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="product_sorting.repository"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\Processor\AggregationListingProcessor">
            <argument type="tagged_iterator" tag="shopware.listing.filter.handler" />
            <argument type="service" id="event_dispatcher" />
            <tag name="shopware.listing.processor" />
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\Processor\AssociationLoadingListingProcessor">
            <tag name="shopware.listing.processor"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\Processor\BehaviorListingProcessor">
            <tag name="shopware.listing.processor" priority="-1000"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\Processor\PagingListingProcessor">
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <tag name="shopware.listing.processor"/>
        </service>

        <service id="Shopware\Core\Content\Product\SearchKeyword\ProductSearchBuilderInterface"
                 class="Shopware\Core\Content\Product\SearchKeyword\ProductSearchBuilder">
            <argument type="service" id="Shopware\Core\Content\Product\SearchKeyword\ProductSearchTermInterpreter"/>
        </service>

        <service id="Shopware\Core\Content\Product\Cart\ProductLineItemCommandValidator">
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Suggest\ResolvedCriteriaProductSuggestRoute"
                 decorates="Shopware\Core\Content\Product\SalesChannel\Suggest\ProductSuggestRoute"
                 decoration-priority="-2000" public="true">

            <argument type="service" id="Shopware\Core\Content\Product\SearchKeyword\ProductSearchBuilderInterface"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Suggest\ResolvedCriteriaProductSuggestRoute.inner"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Listing\Processor\CompositeListingProcessor"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Suggest\CachedProductSuggestRoute"
                 decorates="Shopware\Core\Content\Product\SalesChannel\Suggest\ProductSuggestRoute"
                 decoration-priority="-1000" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Suggest\CachedProductSuggestRoute.inner"/>
            <argument type="service" id="cache.object"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Cache\EntityCacheKeyGenerator"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheTracer"/>
            <argument type="service" id="event_dispatcher"/>
            <argument>%shopware.cache.invalidation.product_suggest_route%</argument>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Suggest\ProductSuggestRoute" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingLoader"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Search\ProductSearchRoute" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\SearchKeyword\ProductSearchBuilderInterface"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingLoader"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Search\ResolvedCriteriaProductSearchRoute" decorates="Shopware\Core\Content\Product\SalesChannel\Search\ProductSearchRoute" decoration-priority="-2000" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Search\ResolvedCriteriaProductSearchRoute.inner"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\RequestCriteriaBuilder"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Listing\Processor\CompositeListingProcessor" />
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Search\CachedProductSearchRoute" decorates="Shopware\Core\Content\Product\SalesChannel\Search\ProductSearchRoute" decoration-priority="-1000" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Search\CachedProductSearchRoute.inner"/>
            <argument type="service" id="cache.object"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Cache\EntityCacheKeyGenerator"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheTracer"/>
            <argument type="service" id="event_dispatcher"/>
            <argument>%shopware.cache.invalidation.product_search_route%</argument>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\ResolveCriteriaProductListingRoute" decorates="Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingRoute" decoration-priority="-2000" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Listing\ResolveCriteriaProductListingRoute.inner"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Listing\Processor\CompositeListingProcessor"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\FindVariant\FindProductVariantRoute" public="true">
            <argument type="service" id="sales_channel.product.repository"/>
        </service>

        <!-- decorated by resolve criteria route -->
        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\CachedProductListingRoute" decorates="Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingRoute" decoration-priority="-1000" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Listing\CachedProductListingRoute.inner"/>
            <argument type="service" id="cache.object"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Cache\EntityCacheKeyGenerator"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheTracer"/>
            <argument type="service" id="event_dispatcher" />
            <argument>%shopware.cache.invalidation.product_listing_route%</argument>
        </service>

        <!-- decorated by cached route -->
        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingRoute" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingLoader" />
            <argument type="service" id="category.repository"/>
            <argument type="service" id="Shopware\Core\Content\ProductStream\Service\ProductStreamBuilder"/>
        </service>

        <service id="Shopware\Core\Content\Product\DataAbstractionLayer\ProductIndexer">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory"/>
            <argument type="service" id="product.repository"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Content\Product\DataAbstractionLayer\VariantListingUpdater"/>
            <argument type="service" id="Shopware\Core\Content\Product\DataAbstractionLayer\ProductCategoryDenormalizer"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\InheritanceUpdater"/>
            <argument type="service" id="Shopware\Core\Content\Product\DataAbstractionLayer\RatingAverageUpdater"/>
            <argument type="service" id="Shopware\Core\Content\Product\DataAbstractionLayer\SearchKeywordUpdater"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\ChildCountUpdater"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\ManyToManyIdFieldUpdater"/>
            <argument type="service" id="Shopware\Core\Content\Product\Stock\StockStorage"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Content\Product\DataAbstractionLayer\CheapestPriceUpdater"/>
            <argument type="service" id="Shopware\Core\Content\Product\DataAbstractionLayer\ProductStreamUpdater"/>
            <argument type="service" id="Shopware\Core\Content\Product\DataAbstractionLayer\StatesUpdater"/>
            <argument type="service" id="messenger.bus.shopware"/>
            <tag name="shopware.entity_indexer" priority="100"/>
        </service>

        <service id="Shopware\Core\Content\Product\DataAbstractionLayer\ProductStreamUpdater">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Content\Product\ProductDefinition"/>
            <argument type="service" id="product.repository"/>
            <argument type="service" id="messenger.bus.shopware"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\ManyToManyIdFieldUpdater"/>
            <tag name="shopware.entity_indexer"/>
        </service>

        <service id="Shopware\Core\Content\Product\DataAbstractionLayer\StatesUpdater">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="event_dispatcher"/>
        </service>

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

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

        <service id="Shopware\Core\Content\Product\DataAbstractionLayer\CheapestPriceUpdater">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Content\Product\DataAbstractionLayer\CheapestPriceQuantitySelector"/>
        </service>

        <service id="Shopware\Core\Content\Product\DataAbstractionLayer\CheapestPriceQuantitySelector"/>

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

        <service id="Shopware\Core\Content\Product\DataAbstractionLayer\SearchKeywordUpdater">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="language.repository"/>
            <argument type="service" id="product.repository"/>
            <argument type="service" id="Shopware\Core\Content\Product\SearchKeyword\ProductSearchKeywordAnalyzer"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="Shopware\Core\Content\Product\DataAbstractionLayer\StockUpdate\StockUpdateFilterProvider">
            <argument type="tagged_iterator" tag="shopware.product.stock_filter"/>
        </service>

        <service id="Shopware\Core\Content\Product\Stock\StockStorage">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="event_dispatcher"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingLoader">
            <argument type="service" id="sales_channel.product.repository"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\ProductCloseoutFilterFactory"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Detail\ProductDetailRoute" public="true">
            <argument type="service" id="sales_channel.product.repository"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Detail\ProductConfiguratorLoader"/>
            <argument type="service" id="Shopware\Core\Content\Category\Service\CategoryBreadcrumbBuilder"/>
            <argument type="service" id="Shopware\Core\Content\Cms\SalesChannel\SalesChannelCmsPageLoader"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\SalesChannelProductDefinition"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\ProductCloseoutFilterFactory"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Detail\CachedProductDetailRoute" decorates="Shopware\Core\Content\Product\SalesChannel\Detail\ProductDetailRoute" decoration-priority="-1000" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Detail\CachedProductDetailRoute.inner"/>
            <argument type="service" id="cache.object"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Cache\EntityCacheKeyGenerator"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheTracer"/>
            <argument type="service" id="event_dispatcher"/>
            <argument>%shopware.cache.invalidation.product_detail_route%</argument>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Review\ProductReviewRoute" public="true">
            <argument type="service" id="product_review.repository"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Review\CachedProductReviewRoute" decorates="Shopware\Core\Content\Product\SalesChannel\Review\ProductReviewRoute" decoration-priority="-1000" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Review\CachedProductReviewRoute.inner"/>
            <argument type="service" id="cache.object"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Cache\EntityCacheKeyGenerator"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheTracer"/>
            <argument type="service" id="event_dispatcher"/>
            <argument>%shopware.cache.invalidation.product_review_route%</argument>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Detail\ProductConfiguratorLoader">
            <argument type="service" id="product_configurator_setting.repository"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Detail\AvailableCombinationLoader"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Detail\AvailableCombinationLoader">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Content\Product\Stock\StockStorage"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\CrossSelling\CachedProductCrossSellingRoute" decorates="Shopware\Core\Content\Product\SalesChannel\CrossSelling\ProductCrossSellingRoute" decoration-priority="-1000" public="true">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\CrossSelling\CachedProductCrossSellingRoute.inner"/>
            <argument type="service" id="cache.object"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Cache\EntityCacheKeyGenerator"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheTracer"/>
            <argument type="service" id="event_dispatcher"/>
            <argument>%shopware.cache.invalidation.product_cross_selling_route%</argument>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\CrossSelling\ProductCrossSellingRoute" public="true">
            <argument type="service" id="product_cross_selling.repository"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Content\ProductStream\Service\ProductStreamBuilder"/>
            <argument type="service" id="sales_channel.product.repository"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingLoader"/>
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\ProductCloseoutFilterFactory"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\Review\ProductReviewSaveRoute" public="true">
            <argument type="service" id="product_review.repository"/>
            <argument type="service" id="Shopware\Core\Framework\Validation\DataValidator"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="event_dispatcher"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\ProductListRoute" public="true">
            <argument type="service" id="sales_channel.product.repository"/>
        </service>

        <service id="Shopware\Core\Content\Product\Cms\BuyBoxCmsElementResolver">
            <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\Detail\ProductConfiguratorLoader"/>
            <argument type="service" id="product_review.repository"/>
            <tag name="shopware.cms.data_resolver"/>
        </service>

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

            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="Shopware\Core\Content\Product\DataAbstractionLayer\CheapestPrice\CheapestPriceAccessorBuilder">
            <argument>%shopware.dal.max_rule_prices%</argument>
            <argument type="service" id="logger"/>

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

        <service id="Shopware\Core\Content\Product\Cleanup\CleanupProductKeywordDictionaryTask">
            <tag name="shopware.scheduled.task"/>
        </service>

        <service id="Shopware\Core\Content\Product\Cleanup\CleanupProductKeywordDictionaryTaskHandler">
            <argument type="service" id="scheduled_task.repository"/>
            <argument type="service" id="logger"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <tag name="messenger.message_handler"/>
        </service>

        <service id="Shopware\Core\Content\Product\Cleanup\CleanupUnusedDownloadMediaTask">
            <tag name="shopware.scheduled.task"/>
        </service>

        <service id="Shopware\Core\Content\Product\Cleanup\CleanupUnusedDownloadMediaTaskHandler">
            <argument type="service" id="scheduled_task.repository"/>
            <argument type="service" id="logger"/>
            <argument type="service" id="Shopware\Core\Content\Media\UnusedMediaPurger"/>
            <tag name="messenger.message_handler"/>
        </service>

        <service id="Shopware\Core\Content\Product\SalesChannel\ProductCloseoutFilterFactory"/>

        <service id="Shopware\Core\Content\Product\Api\ProductNumberFkResolver">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <tag name="shopware.sync.fk_resolver"/>
        </service>
    </services>
</container>
