public static Subscription ByExample <TMessage>(Expression <Func <Builder, TMessage> > factory) where TMessage : IMessage { if (factory.Body.NodeType != ExpressionType.New) { throw new ArgumentException(); } var parameterValues = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); var newExpression = (NewExpression)factory.Body; var parameters = newExpression.Constructor.GetParameters(); for (var argumentIndex = 0; argumentIndex < newExpression.Arguments.Count; ++argumentIndex) { var argumentExpression = newExpression.Arguments[argumentIndex]; var parameterName = parameters[argumentIndex].Name; var parameterValue = GetExpressionValue(argumentExpression); if (parameterValue != null) { parameterValues[parameterName] = parameterValue.ToString(); } } return(new Subscription(MessageUtil.TypeId <TMessage>(), BindingKey.Create(typeof(TMessage), parameterValues))); }
public static Subscription Matching <TMessage>(Expression <Func <TMessage, bool> > predicate) where TMessage : IMessage { var fieldValues = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); var current = predicate.Body; while (current.NodeType == ExpressionType.And || current.NodeType == ExpressionType.AndAlso) { var binaryExpression = (BinaryExpression)current; AddFieldValue <TMessage>(fieldValues, binaryExpression.Right); current = binaryExpression.Left; } AddFieldValue <TMessage>(fieldValues, current); return(new Subscription(MessageUtil.TypeId <TMessage>(), BindingKey.Create(typeof(TMessage), fieldValues))); }
public static SubscriptionsForType Create <TMessage>(params BindingKey[] bindingKeys) where TMessage : IMessage => new SubscriptionsForType(MessageUtil.TypeId <TMessage>(), bindingKeys);
public static MessageBinding Default <T>() where T : IMessage => new MessageBinding(MessageUtil.TypeId <T>(), BindingKey.Empty);
public static Subscription Any <TMessage>() where TMessage : IMessage => new Subscription(MessageUtil.TypeId <TMessage>());