private static void ExportCategory(CompiledMember <T> member, Category category) { if (category == null) { return; } if (!categories.TryGetValue(category.Identifier, out CompiledCategory <T> compiledCategory)) { if (categories.ContainsKey(category.Identifier)) { categories.Add(category.Identifier, compiledCategory = new CompiledCategory <T>(category.Identifier, new List <CompiledMember <T> >())); } else { throw new Exception($"DynamicMapper.Mapper: failed to create category [{category.Identifier}]"); } } if (compiledCategory.Fields.Where(x => x.Identifier == member.Identifier).Count() > 0) { throw new Exception($"DynamicMapper.Mapper: duplicate [{member.Identifier}] found in category [{category.Identifier}]!"); } compiledCategory.Fields.Add(member); }
private static void Compile(MemberInfo member) { CompiledMember <T> compiledMember = null; try { compiledMember = new CompiledMember <T>(member.Name, ValueType(member), CompiledRetriever(member), CompiledSetter(member)); if (!members.ContainsKey(compiledMember.Identifier)) { members.Add(compiledMember.Identifier, compiledMember); } else { throw new Exception($"DynamicMapper.Mapper: failed to add member [{compiledMember.Identifier}]!"); } } catch { throw new InvalidOperationException($"DynamicMapper.Mapper: cannot access member [{member.Name}]!"); } if (compiledMember != null) { foreach (Category category in member.GetCustomAttributes <Category>()) { ExportCategory(compiledMember, category); } } }