Esempio n. 1
0
 public void Setup()
 {
     converter1 = Converter.CreateConverter(typeof(int), typeof(long));
     converter2 = Converter.CreateConverter(typeof(long), typeof(int));
     converter3 = Converter.CreateConverter(typeof(string), typeof(int));
     converter4 = Converter.CreateConverter(typeof(int), typeof(string));
 }
Esempio n. 2
0
        public Func <object, object> GetConverter(IObjectConverter context, Type sourceType, Type targetType)
        {
            // To Array
            if (targetType.IsArray)
            {
                var targetElementType = targetType.GetElementType();
                var sourceElementType = ResolveEnumerableType(sourceType, out var enumerableType);
                if (sourceElementType != null)
                {
                    if (sourceElementType == targetElementType)
                    {
                        // IE<T> to T[]
                        return(((IConverter)Activator.CreateInstance(
                                    SameTypeArrayProvider.Default.GetConverterType(enumerableType).MakeGenericType(targetElementType))).Convert);
                    }

                    var converter = context.CreateConverter(sourceElementType, targetElementType);
                    if (converter != null)
                    {
                        // IE<T1> to T2[]
                        return(((IConverter)Activator.CreateInstance(
                                    OtherTypeArrayProvider.Default.GetConverterType(enumerableType).MakeGenericType(sourceElementType, targetElementType),
                                    converter)).Convert);
                    }
                }

                return(null);
            }

            // To IE<T>
            if (targetType.IsGenericType &&
                Providers.TryGetValue(targetType.GetGenericTypeDefinition(), out var providerPair))
            {
                var targetElementType = targetType.GenericTypeArguments[0];
                var sourceElementType = ResolveEnumerableType(sourceType, out var enumerableType);
                if (sourceElementType != null)
                {
                    if (sourceElementType == targetElementType)
                    {
                        // IE<T> to IE<T>
                        return(((IConverter)Activator.CreateInstance(
                                    providerPair.SameTypeProvider.GetConverterType(enumerableType).MakeGenericType(targetElementType))).Convert);
                    }

                    var converter = context.CreateConverter(sourceElementType, targetElementType);
                    if (converter != null)
                    {
                        // IE<T1> to IE<T2>
                        return(((IConverter)Activator.CreateInstance(
                                    providerPair.OtherTypeProvider.GetConverterType(enumerableType).MakeGenericType(sourceElementType, targetElementType),
                                    converter)).Convert);
                    }
                }

                return(null);
            }

            return(null);
        }
Esempio n. 3
0
        //--------------------------------------------------------------------------------
        // Converter
        //--------------------------------------------------------------------------------

        Func <object, object> IResultMapperCreateContext.GetConverter(Type sourceType, Type destinationType, ICustomAttributeProvider provider)
        {
            var converter = CreateHandler(destinationType, provider);

            if (converter != null)
            {
                return(converter);
            }

            if ((destinationType == sourceType) ||
                (destinationType.IsNullableType() && (Nullable.GetUnderlyingType(destinationType) == sourceType)))
            {
                return(null);
            }

            return(objectConverter.CreateConverter(sourceType, destinationType));
        }