public override int Match(ConverterMatchContext context) { var sourceDistance = ReflectionHelper.GetDistance(context.SourceType, typeof(TSource)); var targetDistance = ReflectionHelper.GetDistance(context.TargetType, typeof(TTarget)); return(sourceDistance == -1 || targetDistance == -1 ? -1 : sourceDistance + targetDistance); }
internal ValueConverter Find(ConverterMatchContext context) { return((from converter in _converters let score = converter.Match(context) where score >= 0 orderby score, converter.Intrinsic ? 1 : 0 select converter).FirstOrDefault()); }
public override int Match(ConverterMatchContext context) { if (Equals(context.GetProperty(typeof(PrimitiveValueConverter)), true)) { return(-1); } return(ExecuteMatch(context)); }
private ValueConverter FindConverter(Type sourceType, Type targetType) { var matchContext = new ConverterMatchContext(sourceType, targetType); matchContext.SetProperty(typeof(PrimitiveValueConverter), true); var converter = Container.Converters.Find(matchContext); if (ReferenceEquals(converter, this)) { return(null); } return(converter); }
public override int Match(ConverterMatchContext context) { var sourceDistance = ReflectionHelper.GetDistance(context.SourceType, typeof(IEnumerable <>)); if (sourceDistance == -1) { return(-1); } var targetDistance = ReflectionHelper.GetDistance(context.TargetType, typeof(IEnumerable <>)); if (targetDistance == -1) { return(-1); } return(sourceDistance + targetDistance); }
private int ExecuteMatch(ConverterMatchContext context) { var targetType = context.TargetType; var sourceType = context.SourceType; #if NETSTANDARD var reflectingTargetType = targetType.GetTypeInfo(); var reflectingSourceType = sourceType.GetTypeInfo(); #else var reflectingTargetType = targetType; var reflectingSourceType = sourceType; #endif if (targetType.IsNullable() && sourceType.IsNullable()) { var distance = MatchConvert(reflectingSourceType.GetGenericArguments()[0], reflectingTargetType.GetGenericArguments()[0]); if (distance != -1) { return(distance + 2); } } if (targetType.IsNullable()) { var distance = MatchConvert(sourceType, reflectingTargetType.GetGenericArguments()[0]); if (distance != -1) { return(distance + 1); } } if (sourceType.IsNullable()) { var distance = MatchConvert(reflectingSourceType.GetGenericArguments()[0], targetType); if (distance != -1) { return(distance + 1); } } return(MatchConvert(sourceType, targetType)); }
public override int Match(ConverterMatchContext context) { if (context.SourceType == typeof(string)) { var targetType = context.TargetType; #if NetCore if (targetType.IsNullable() && GetConvertMethod(targetType.GetTypeInfo().GetGenericArguments()[0]) != null) { return(1); } #else if (targetType.IsNullable() && GetConvertMethod(targetType.GetGenericArguments()[0]) != null) { return(1); } #endif if (GetConvertMethod(context.TargetType) != null) { return(0); } } return(-1); }
public abstract int Match(ConverterMatchContext context);
public override int Match(ConverterMatchContext context) { return(context.TargetType == typeof(string) ? ReflectionHelper.GetDistance(context.SourceType, typeof(object)) : -1); }