Ejemplo n.º 1
0
        /// <summary>
        ///     Sets the key selector
        /// </summary>
        /// <typeparam name="TMessageType">
        ///     The message type
        /// </typeparam>
        /// <typeparam name="TKeyType">
        ///     The key type
        /// </typeparam>
        /// <param name="builder">
        ///     The decorator builder
        /// </param>
        /// <param name="keySelector">
        ///     The key selector
        /// </param>
        /// <returns>
        ///     A builder
        /// </returns>
        public static DistinctDecoratorBuilder <TMessageType, TKeyType> KeySelector <TMessageType, TKeyType>(
            this DistinctDecoratorBuilder <TMessageType> builder,
            Func <TMessageType, Task <TKeyType> > keySelector)
        {
            if (keySelector == null)
            {
                throw new ArgumentNullException(nameof(keySelector));
            }

            return(builder.KeySelector((msg, token) => keySelector(msg)));
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Lets a message with the specified key pass through once
        /// </summary>
        /// <typeparam name="TMessageType">The message type</typeparam>
        /// <param name="chainBuilder">The builder</param>
        /// <param name="config">The action used to configure the distinct decorator</param>
        /// <returns>The builder</returns>
        public static IChainBuilder <TMessageType> Distinct <TMessageType>(
            this IChainBuilder <TMessageType> chainBuilder,
            Action <DistinctDecoratorBuilder <TMessageType> > config)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            var builder = new DistinctDecoratorBuilder <TMessageType>();

            config(builder);
            return(chainBuilder.AddDecorator(builder));
        }