public static PropertyMapCollection BuildPropertyMaps(Type objType) { PropertyInfo[] propertyInfos = objType.GetProperties(); //added by Pluto Mei. 2014-1-6 //to support field in map if (propertyInfos.Length > 0) { foreach (PropertyInfo propertyInfo in propertyInfos) { string propertyName = propertyInfo.Name; Type propertyType = propertyInfo.PropertyType; PropertyMap map = new PropertyMap(propertyName, propertyInfo); PropertyMapCache.AddMap(objType, map); if (!propertyType.HasElementType && IsComplexType(propertyType)) { List <string> parentNames = new List <string> { propertyName }; BuildSubPropertyMaps(objType, parentNames, propertyType); } } } else { foreach (FieldInfo fieldInfo in objType.GetFields()) { //add by Pluto Mei.2014-1-6 //TODO: need reflect to support field //old design is strong bind with propertyType //to support field will cost many workload,so delay it. } } return(PropertyMapCache.GetMaps(objType)); }
public static PropertyMapCollection GetPropertyMaps(Type objType) { PropertyMapCollection pmc = PropertyMapCache.GetMaps(objType); if (pmc == null) { lock (s_SyncObj) { pmc = PropertyMapCache.GetMaps(objType); if (pmc == null) { pmc = BuildPropertyMaps(objType); } } } return(pmc); }