private object[] BindParametesValues(IEnumerable <IParameterInput> inputParameters) { var parameters = new object[Parameters.Count]; var values = new ParameterValuesList <MethodParameter>(Parameters); foreach (var inputParameter in inputParameters) { values.SetParameterValue(inputParameter); } var allValues = values.GetParameterValues(); foreach (var defPrm in Parameters) { object value; if (!allValues.TryGetValue(defPrm, out value)) { if (defPrm.AllowsDefaultValue) { parameters[defPrm.PositionIndex] = defPrm.DefaultValue; continue; } throw new Exception($"{defPrm.Name} parameter value wasn't supplied"); } parameters[defPrm.PositionIndex] = defPrm.IsCollection ? CollectionConstructor.CreateInstance(defPrm.Type, value) : value; } return(parameters); }
public PropertyParameter(PropertyInfo property, CommandParameterDescriptor description) : base(description) { Property = property; ValueType = IsCollection ? CollectionConstructor.GetElementType(property.PropertyType) : property.PropertyType; }
public MethodParameter(ParameterInfo parameter) : base(CommandParameterDescriptor.CreateFor(parameter)) { _parameter = parameter; ValueType = IsCollection ? CollectionConstructor.GetElementType(_parameter.ParameterType) : _parameter.ParameterType; Debug.Assert(!parameter.IsOut); }
public static CommandParameterDescriptor CreateFor(PropertyInfo property) { var descriptor = new CommandParameterDescriptor { AllowsDefaultValue = true, Name = property.Name.ToLower(), IsCollection = CollectionConstructor.IsSupportedCollectionType(property.PropertyType), PositionIndex = -1 }; var attr = property.GetCustomAttribute <ParameterAttribute>(); if (attr == null) { return(descriptor); } attr.SetCreateDescriptorValues(descriptor); return(descriptor); }
public static CommandParameterDescriptor CreateFor(ParameterInfo parameter) { var descriptor = new CommandParameterDescriptor { Name = parameter.Name.ToLower(), AllowsDefaultValue = parameter.HasDefaultValue, DefaultValue = parameter.DefaultValue, IsCollection = CollectionConstructor.IsSupportedCollectionType(parameter.ParameterType), PositionIndex = parameter.Position }; var attr = parameter.GetCustomAttribute <ParameterAttribute>(); if (attr == null) { return(descriptor); } attr.SetCreateDescriptorValues(descriptor); return(descriptor); }