Example #1
0
        private void validateArguments(MethodCollection collection)
        {
            var possibleTypes = new List <Type>(collection.ValidArgumentTypes)
            {
                EventType
            };

            if (EventType != null)
            {
                possibleTypes.Add(typeof(Event <>).MakeGenericType(EventType));
            }
            if (collection.AggregateType != null)
            {
                possibleTypes.Fill(collection.AggregateType);
            }

            foreach (var parameter in Method.GetParameters())
            {
                var type = parameter.ParameterType;
                if (!possibleTypes.Contains(type))
                {
                    _errors.Add(
                        $"Parameter of type '{type.FullNameInCode()}' is not supported. Valid options are {possibleTypes.Select(x => x.FullNameInCode()).Join(", ")}");
                }
            }
        }
Example #2
0
            public void Add(MethodCollection methods, MethodInfo method, Type aggregateType, IList <ParameterExpression> parameters)
            {
                Expression body       = Expression.Call(parameters[0], method, parameters.OfType <Expression>().Skip(1).ToArray());
                var        expression = Expression.Lambda <T>(body, parameters);
                var        lambda     = expression.Compile(); // TODO -- use FastExpressionCompiler here!

                var eventType = method.GetEventType(aggregateType);

                methods.AddLambda(lambda, eventType);
            }
Example #3
0
        internal void Validate(MethodCollection collection)
        {
            if (EventType == null)
            {
                _errors.Add(NoEventType);
            }
            else
            {
                validateArguments(collection);
            }

            if (collection.ValidReturnTypes.Any() && !collection.ValidReturnTypes.Contains(ReturnType))
            {
                var message = $"Return type '{ReturnType.FullNameInCode()}' is invalid. The valid options are {collection.ValidArgumentTypes.Select(x => x.FullNameInCode()).Join(", ")}";
                AddError(message);
            }
        }