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 static void SetPropertyValues(object instance, ICollection <PropertyParameter> definedParameters, IEnumerable <IParameterInput> inputParameters) { var values = new ParameterValuesList <PropertyParameter>(definedParameters); foreach (var inputPrm in inputParameters) { values.SetParameterValue(inputPrm); } var allValues = values.GetParameterValues(); foreach (var defPrm in definedParameters) { object value; if (!allValues.TryGetValue(defPrm, out value)) { if (defPrm.AllowsDefaultValue) { value = defPrm.DefaultValue; } else { throw new Exception($"{defPrm.Name} parameter value wasn't supplied"); } } defPrm.Property.SetValue(instance, value); } }