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)); }
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); }
//-------------------------------------------------------------------------------- // 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)); }