internal TypeAdapterSettings GetMergedSettings(Type sourceType, Type destinationType, MapType mapType) { if (this.RequireExplicitMapping && mapType != MapType.InlineMap) { if (!this.Dict.ContainsKey(new TypeTuple(sourceType, destinationType))) { throw new InvalidOperationException( $"Implicit mapping is not allowed (check GlobalSettings.RequireExplicitMapping) and no configuration exists for the following mapping: TSource: {sourceType} TDestination: {destinationType}"); } } var settings = (from rule in this.Rules.Reverse <TypeAdapterRule>() let priority = rule.Priority(sourceType, destinationType, mapType) where priority != null orderby priority.Value descending select rule.Settings).ToList(); var result = new TypeAdapterSettings { NoInherit = settings.FirstOrDefault(s => s.NoInherit.HasValue)?.NoInherit }; foreach (var setting in settings) { result.Apply(setting); } return(result); }
internal TypeAdapterSettings GetMergedSettings(TypeTuple tuple, MapType mapType) { var arg = new PreCompileArgument { SourceType = tuple.Source, DestinationType = tuple.Destination, MapType = mapType, ExplicitMapping = this.RuleMap.ContainsKey(tuple), }; var settings = (from rule in this.Rules.Reverse <TypeAdapterRule>() let priority = rule.Priority(arg) where priority != null orderby priority.Value descending select rule.Settings).ToList(); var result = new TypeAdapterSettings(); foreach (var setting in settings) { result.Apply(setting); } //remove recursive include types if (mapType == MapType.MapToTarget) { result.Includes.Remove(tuple); } else { result.Includes.RemoveAll(t => t.Source == tuple.Source); } return(result); }
internal TypeAdapterSettings GetMergedSettings(TypeTuple tuple, MapType mapType) { var arg = new PreCompileArgument { SourceType = tuple.Source, DestinationType = tuple.Destination, MapType = mapType, ExplicitMapping = this.RuleMap.ContainsKey(tuple), }; //auto add setting if there is attr setting var attrSettings = GetAttributeSettings(tuple, mapType).ToList(); if (!arg.ExplicitMapping && attrSettings.Any(rule => rule.Priority(arg) == 100)) { GetSettings(tuple); arg.ExplicitMapping = true; } var result = new TypeAdapterSettings(); lock (this.Rules) { var rules = this.Rules.Reverse <TypeAdapterRule>().Concat(attrSettings); var settings = from rule in rules let priority = rule.Priority(arg) where priority != null orderby priority.Value descending select rule.Settings; foreach (var setting in settings) { result.Apply(setting); } } //remove recursive include types if (mapType == MapType.MapToTarget) { result.Includes.Remove(tuple); } else { result.Includes.RemoveAll(t => t.Source == tuple.Source); } return(result); }
internal TypeAdapterSettings GetMergedSettings(Type sourceType, Type destinationType, MapType mapType) { var settings = (from rule in this.Rules.Reverse <TypeAdapterRule>() let priority = rule.Priority(sourceType, destinationType, mapType) where priority != null orderby priority.Value descending select rule.Settings).ToList(); var result = new TypeAdapterSettings { NoInherit = settings.FirstOrDefault(s => s.NoInherit.HasValue)?.NoInherit }; foreach (var setting in settings) { result.Apply(setting); } return(result); }