<?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="knp_rad.domain_event.dispatcher.doctrine.class">Knp\RadBundle\DomainEvent\Dispatcher\Doctrine</parameter>
        <parameter key="knp_rad.domain_event.delayed_event_names" type="collection"></parameter>
        <parameter key="knp_rad.domain_event.queued_event_names" type="collection"></parameter>
        <parameter key="knp_rad.domain_event.dispatcher.doctrine.class">Knp\RadBundle\DomainEvent\Dispatcher\Doctrine</parameter>
        <parameter key="knp_rad.domain_event.dispatcher.delayed.class">Knp\RadBundle\DomainEvent\Dispatcher\Delayed</parameter>
        <parameter key="knp_rad.domain_event.dispatcher.queued.class">Knp\RadBundle\DomainEvent\Dispatcher\Queued</parameter>
    </parameters>

    <services>

        <service id="knp_rad.domain_event.dispatcher.doctrine" class="%knp_rad.domain_event.dispatcher.doctrine.class%">
            <argument type="service" id="event_dispatcher" />
            <tag name="doctrine.event_listener" event="postPersist" />
            <tag name="doctrine.event_listener" event="postUpdate" />
            <tag name="doctrine.event_listener" event="postRemove" />
            <tag name="doctrine.event_listener" event="postFlush" />
            <tag name="remove-when-missing" service="doctrine" />
        </service>

        <service id="knp_rad.domain_event.dispatcher.delayed" class="%knp_rad.domain_event.dispatcher.delayed.class%">
            <argument type="service" id="service_container" />
            <argument>%knp_rad.domain_event.delayed_event_names%</argument>
            <tag name="doctrine.event_subscriber" />
            <tag name="kernel.event_listener" event="kernel.terminate" method="dispatchDelayedDomainEvents" />
            <tag name="remove-when-missing" service="doctrine" />
        </service>

        <service id="knp_rad.domain_event.dispatcher.queued" class="%knp_rad.domain_event.dispatcher.queued.class%">
            <argument type="service" id="doctrine.orm.default_entity_manager.event_manager" />
            <argument>%knp_rad.domain_event.queued_event_names%</argument>
            <tag name="remove-when-missing" service="doctrine" />
        </service>

    </services>
</container>
