# yaml-language-server: $schema=../vendor/symfony/dependency-injection/Loader/schema/services.schema.json

# This file is the entry point to configure your own services.
# Files in the packages/ subdirectory configure your dependencies.
# See also https://symfony.com/doc/current/service_container/import.html

# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
parameters:

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.

    # any service implementing PluginInterface is auto-tagged so PluginRegistry
    # can collect all of them via #[AutowireIterator('app.plugin')]
    _instanceof:
        App\Plugin\PluginInterface:
            tags: ['app.plugin']
        App\Plugin\ShortcodeHandlerInterface:
            tags: ['app.shortcode_handler']
        App\Plugin\CronTaskInterface:
            tags: ['app.cron_task']
        App\Plugin\ArticleViewCountProviderInterface:
            tags: ['app.article_view_count_provider']

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App\:
        resource: '../src/'

    # plugins live in their own top-level directory, each as its own
    # namespace/service, discovered automatically - see Plugins/footer/ for
    # the sample plugin
    Plugins\:
        resource: '../Plugins/'
        exclude:
            - '../Plugins/*/templates/'

    # add more service definitions when explicit configuration is needed
    # please note that last definitions always *replace* previous ones
    App\Application\Bus\CommandBus: '@App\Application\Bus\SymfonyCommandBus'
    App\Application\Bus\QueryBus: '@App\Application\Bus\SymfonyQueryBus'
