1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| public interface IPropertyMappingService { Dictionary<string, PropertyMappingValue> GetPropertyMapping<TSource, TDestination>(); bool IsMappingExists<TSource, TDestingation>(string fields); } public class PropertyMappingService : IPropertyMappingService { private Dictionary<string, PropertyMappingValue> _touristRoutePropertyMapping = new Dictionary<string, PropertyMappingValue>(StringComparer.OrdinalIgnoreCase) { { "Id", new PropertyMappingValue(new List<string>(){ "Id" }) }, { "Title", new PropertyMappingValue(new List<string>(){ "Title" })}, { "Rating", new PropertyMappingValue(new List<string>(){ "Rating" })}, { "OriginalPrice", new PropertyMappingValue(new List<string>(){ "OriginalPrice" })}, }; private IList<IPropertyMapping> _propertyMappings = new List<IPropertyMapping>();
public PropertyMappingService() { _propertyMappings.Add( new PropertyMapping<TouristRouteDto, TouristRoute>( _touristRoutePropertyMapping)); }
public Dictionary<string, PropertyMappingValue> GetPropertyMapping<TSource, TDestination>() { var matchingMapping = _propertyMappings.OfType<PropertyMapping<TSource, TDestination>>();
if (matchingMapping.Count() == 1) { return matchingMapping.First()._mappingDictionary; }
throw new Exception( $"Cannot find exact property mapping instance for <{typeof(TSource)},{typeof(TDestination)}");
}
public bool IsMappingExists<TSource, TDestination>(string fields) { var propertyMapping = GetPropertyMapping<TSource, TDestination>();
if (string.IsNullOrWhiteSpace(fields)) { return true; }
var fieldsAfterSplit = fields.Split(",");
foreach(var field in fieldsAfterSplit) { var trimmedField = field.Trim(); var indexOfFirstSpace = trimmedField.IndexOf(" "); var propertyName = indexOfFirstSpace == -1 ? trimmedField : trimmedField.Remove(indexOfFirstSpace);
if (!propertyMapping.ContainsKey(propertyName)) { return false; } } return true; } }
|