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(", ")}"); } } }
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); }
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); } }