protected override IMemberAttribute ParserMember(string typeFullName, XmlNode memberNode) { if (string.IsNullOrEmpty(typeFullName)) { throw new ArgumentNullException("typeFullName"); } object target = MemberCache.Get(typeFullName); if (null == target) { throw new Exception(string.Format("the member cache is null for {0} type.", typeFullName)); } var members = (IDictionary <string, IMemberAttribute>)target; object name; XmlFileParser.TryGetAttributeValue(memberNode, "Name", out name); if (null == name) { throw new Exception("there is no name in the member config item."); } IMemberAttribute member = members[name.ToString()]; member = members[member.Name] = GenerateMember(member, memberNode); MemberCache.InsertOrUpdate(typeFullName, members); return(member); }
public IDictionary <string, IMemberAttribute> ReflectMembers(string typeFullName, out string defaultTableName) { //string typeFullName = entity.Implement; if (string.IsNullOrEmpty(typeFullName)) { throw new ArgumentNullException("typeFullName"); } Type type = Type.GetType(typeFullName, true); defaultTableName = type.Name; PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); //the interface Type itf = type.GetInterface("IAlbianObject"); //get the signature interface PropertyInfo idInfo = itf.GetProperty("Id"); PropertyInfo isNewInfo = itf.GetProperty("IsNew"); if (null == propertyInfos || 0 == propertyInfos.Length) { throw new Exception(string.Format("Reflect the {0} property is error.", typeFullName)); } IDictionary <string, IMemberAttribute> memberAttributes = new Dictionary <string, IMemberAttribute>(); foreach (PropertyInfo propertyInfo in propertyInfos) { IMemberAttribute memberAttribute = ReflectProperty(propertyInfo, idInfo, isNewInfo); memberAttributes.Add(memberAttribute.Name, memberAttribute); } if (0 == memberAttributes.Count) { return(null); } PropertyCache.InsertOrUpdate(typeFullName, propertyInfos); //just only have property MemberCache.InsertOrUpdate(typeFullName, memberAttributes); //parser object by member attributes return(memberAttributes); }