/// <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))); }
/// <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)); }