Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }