private static object GetParameter(ParameterInfo param, VariableTypes variableTypes, IEnumerable <ExecArgument <Info> > inputs) { var input = inputs.FirstOrDefault(i => i.Argument.ArgumentName == param.Name); return(input != null ? variableTypes.TranslateValue(input.Value, param.ParameterType) : GetDefault(param.ParameterType)); }
private static object GetAnonymousArgs (ConstructorInfo anonTypeCtor, VariableTypes variableTypes, IEnumerable <ExecArgument <Info> > inputs) { var parameters = anonTypeCtor .GetParameters() .Select(p => GetParameter(p, variableTypes, inputs)) .ToArray(); return(anonTypeCtor.Invoke(parameters)); }
internal static object GetArgs(Type argsType, VariableTypes variableTypes, IEnumerable <ExecArgument <Info> > inputs) { var paramlessCtor = argsType.GetConstructors().FirstOrDefault(c => c.GetParameters().Length == 0); if (paramlessCtor != null) { return(GetParamlessArgs(argsType, paramlessCtor, variableTypes, inputs)); } var anonTypeCtor = argsType.GetConstructors().Single(); return(GetAnonymousArgs(anonTypeCtor, variableTypes, inputs)); }
internal static IEnumerable <ISchemaArgument <Info> > GetArgs(VariableTypes variableTypes, Type argsType) { var paramlessCtor = argsType.GetConstructors().FirstOrDefault(c => c.GetParameters().Length == 0); if (paramlessCtor != null) { return(argsType.GetProperties() .Select(p => new SchemaArgument(p.Name, variableTypes.VariableTypeOf(p.PropertyType)))); } var anonTypeCtor = argsType.GetConstructors().Single(); return(anonTypeCtor.GetParameters() .Select(p => new SchemaArgument(p.Name, variableTypes.VariableTypeOf(p.ParameterType)))); }
private static object GetParamlessArgs (Type argsType, ConstructorInfo paramlessCtor, VariableTypes variableTypes, IEnumerable <ExecArgument <Info> > inputs) { var args = paramlessCtor.Invoke(null); foreach (var input in inputs) { var prop = argsType.GetProperty(input.Argument.ArgumentName); prop.GetSetMethod() .Invoke(args, new[] { variableTypes.TranslateValue(input.Value, prop.PropertyType) }); } return(args); }
/// <summary> /// Instantiate an object of <typeparamref name="TArgs"/> given a list of <paramref name="inputs"/>. /// This works for objects with parameterless constructors or anonymous types. /// </summary> /// <typeparam name="TArgs"></typeparam> /// <param name="variableTypes"></param> /// <param name="inputs"></param> /// <returns></returns> internal static TArgs GetArgs <TArgs>(VariableTypes variableTypes, IEnumerable <ExecArgument <Info> > inputs) => (TArgs)GetArgs(typeof(TArgs), variableTypes, inputs);
internal static IEnumerable <ISchemaArgument <Info> > GetArgs <TArgs>(VariableTypes variableTypes) => GetArgs(variableTypes, typeof(TArgs));
public MetaTypeHandler(VariableTypes variableTypes) { _variableTypes = variableTypes; }
public MetaTypeHandler(VariableTypes variableTypes) { _variableTypes = variableTypes; }