/// <summary>
        /// Creates a new ProcessorConfigurator to be configured as part of the current context
        /// </summary>
        /// <param name="configurer">configuration handler</param>
        /// <returns>Current instance, to be used in a fluent manner</returns>
        public BusConfigurator WithProcessor(Action <ProcessorConfigurator> configurer)
        {
            var processorConfigurator = new ProcessorConfigurator(this.Builder, configurer);

            this.processorConfigurators.Add(processorConfigurator);

            return(this);
        }
Exemple #2
0
        public static ProcessorConfigurator RegisterAggregateEventHandler <TMessage>(this ProcessorConfigurator processorConfigurator,
                                                                                     string handlerName,
                                                                                     Func <IAggregateEvent <TMessage>, Task> handlerFunc)
        {
            processorConfigurator.Configuring += processor => SubscribeAggregateEvent <TMessage, object>(
                processor,
                handlerName,
                (_, msg) => handlerFunc(msg),
                new object());                                                 //dummy instance

            return(processorConfigurator);
        }
Exemple #3
0
        public static ProcessorConfigurator RegisterConditionalHandler <THandler>(
            this ProcessorConfigurator processorConfigurator,
            Func <bool> predicate,
            THandler instance = null)
            where THandler : class
        {
            if (!predicate())
            {
                return(processorConfigurator);
            }

            return(processorConfigurator.RegisterHandler(instance));
        }
Exemple #4
0
        /// <summary>
        /// Looks for methods with the signatures:
        /// On(ICommand<typeparamref name="T"/>)
        /// On(IEvent<typeparamref name="T"/>)
        /// On(IAggregateEvent<typeparamref name="T"/>)
        /// and susbscribes as message handler for the specific message Type
        /// </summary>
        /// <typeparam name="THandler">Type of the message handler</typeparam>
        /// <param name="processorConfigurator">processorConfigurator used to register handler</param>
        /// <param name="instance">optional instance</param>
        /// <remarks>When instance is not provided, an instance of THandler will be resolved with the IoC container
        /// <returns>List of message names subscribed by this handler</returns>
        public static ProcessorConfigurator RegisterHandler <THandler>(this ProcessorConfigurator processorConfigurator,
                                                                       THandler instance = null)
            where THandler : class
        {
            processorConfigurator.Configuring += processor => RegisterCQRSHandler <THandler>(processor, instance);

            // add this type to IoC known types, so that it can be resolved
            // not pretty, but it's a compromise..
            processorConfigurator.Builder
            .IoCConfigurator
            .KnownTypes.Add(typeof(THandler));

            return(processorConfigurator);
        }
Exemple #5
0
 public static ProcessorConfigurator RegisterConditionalEventHandler <TMessage>(this ProcessorConfigurator processorConfigurator,
                                                                                string handlerName,
                                                                                Func <bool> predicate,
                                                                                Func <IEvent <TMessage>, Task> handlerFunc)
 {
     if (!predicate())
     {
         return(processorConfigurator);
     }
     return(processorConfigurator.RegisterEventHandler(handlerName, handlerFunc));
 }