public object ConvertValue(TypeEquality typeEquality, object value)
        {
            var        result        = value;
            MethodInfo method        = null;
            var        sourceResolve = typeEquality.SourceResolve;
            var        targetResolve = typeEquality.TargetResolve;

            if (typeEquality.AreEnumerablesTypesEquel)
            {
                if (sourceResolve.IsEnumerableTypeGenericModel)
                {
                    method = sourceResolve.PropertyType.GetMethod("MapListOfModels",
                                                                  new[] { targetResolve.PropertyType });
                    method = method.MakeGenericMethod(targetResolve.EnumerableTypes.First());
                }
                else if (targetResolve.IsEnumerableTypeGenericModel)
                {
                    method =
                        typeof(Models.GenericModel).GetMethods()
                        .Where(m => m.Name == "MapListOfModels")
                        .First(m => m.GetGenericArguments().Count() == 2);

                    method = method.MakeGenericMethod(sourceResolve.EnumerableTypes.First(),
                                                      targetResolve.EnumerableTypes.First());
                }
                else if (typeEquality.AreEnumerablesTypesSimple)
                {
                    return(result);
                }
                else
                {
                    var message =
                        string.Format(
                            "At least source or target need to be of type IGenericModel, source propertey is of type {0}, target propertey is of type {1}",
                            sourceResolve.PropertyType, targetResolve.PropertyType);
                    throw new Exception(message);
                }

                result = method.Invoke(null, new[] { value });
            }
            else
            {
                if (sourceResolve.IsEnumerableTypeNumeric ||
                    targetResolve.IsEnumerableTypeNumeric)
                {
                    var targetType = targetResolve.EnumerableTypes.First();

                    method = typeof(Models.GenericModel).GetMethod("ConvertEnumerable", BindingFlags.NonPublic | BindingFlags.Static);
                    var generic = method.MakeGenericMethod(targetType);
                    result = generic.Invoke(null, new[] { value });


                    return(result);
                }
            }


            return(result);
        }
        public object ConvertValue(TypeEquality typeEquality, object value)
        {
            object result        = null;
            var    targetResolve = typeEquality.TargetResolve;
            var    sourceResolve = typeEquality.SourceResolve;

            if (targetResolve.IsGenericModel)
            {
                result = Activator.CreateInstance(targetResolve.PropertyType, value);
            }
            else if (sourceResolve.IsGenericModel)
            {
                var method = sourceResolve.MapToMethod;

                var methodType = method.MakeGenericMethod(targetResolve.PropertyType);

                result = methodType.Invoke(value, null);
            }
            else if (targetResolve.IsEnum || sourceResolve.IsEnum)
            {
                return(value);
            }
            else if (targetResolve.IsNullable || sourceResolve.IsNullable)
            {
                if (targetResolve.UnderlyingType.IsEnum)
                {
                    result = Enum.ToObject(targetResolve.UnderlyingType, value);
                }
                else if (sourceResolve.UnderlyingType.IsEnum)
                {
                    result = Convert.ChangeType(value, targetResolve.UnderlyingType);
                }
            }
            else
            {
                var message =
                    string.Format(
                        "At least source or target need to be of type IGenericModel, source propertey is of type {0}, target propertey is of type {1}",
                        sourceResolve.PropertyType, targetResolve.PropertyType);
                throw new Exception(message);
            }
            return(result);
        }
 public object ConvertValue(TypeEquality typeEquality, object value)
 {
     return(value.ToString());
 }
Beispiel #4
0
 public object ConvertValue(TypeEquality typeEquality, object source)
 {
     throw new System.NotImplementedException();
 }
Beispiel #5
0
        private static TypeEquality CheckTypes(ResolveModel source, ResolveModel target)
        {
            var typeEquality = new TypeEquality(source, target);

            return(typeEquality);
        }