コード例 #1
0
        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)));
        }
コード例 #2
0
        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)));
        }
コード例 #3
0
 public static SubscriptionsForType Create <TMessage>(params BindingKey[] bindingKeys)
     where TMessage : IMessage
 => new SubscriptionsForType(MessageUtil.TypeId <TMessage>(), bindingKeys);
コード例 #4
0
ファイル: MessageBinding.cs プロジェクト: thomasraynal/busy
 public static MessageBinding Default <T>()
     where T : IMessage
 => new MessageBinding(MessageUtil.TypeId <T>(), BindingKey.Empty);
コード例 #5
0
 public static Subscription Any <TMessage>() where TMessage : IMessage
 => new Subscription(MessageUtil.TypeId <TMessage>());