Beispiel #1
0
        public CommandObjectIOMethod(ConstructorInfo c, string recordName, bool isRootElement)
        {
            m_isRootElement = isRootElement;
            m_recordName    = recordName;
            var type = typeof(T);

            m_constructor = c.Compile <T>();

            var records          = new List <FieldIO>();
            HashSet <string> ids = new HashSet <string>();

            foreach (var member in type.GetMembers(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance))
            {
                AddIfValid(ids, records, member);
                if (member is MethodInfo method)
                {
                    object[] attributes = member.GetCustomAttributes(true);
                    foreach (var attribute in attributes.OfType <CommandEventAttribute>())
                    {
                        switch (attribute.Events)
                        {
                        case CommandEvents.BeforeLoad:
                            TryAdd(method, ref BeforeLoad);
                            break;

                        case CommandEvents.AfterLoad:
                            TryAdd(method, ref AfterLoad);
                            break;

                        case CommandEvents.BeforeSave:
                            TryAdd(method, ref BeforeSave);
                            break;

                        case CommandEvents.AfterSave:
                            TryAdd(method, ref AfterSave);
                            break;

                        case CommandEvents.MissingValue:
                            TryAdd(method, ref MissingValue);
                            break;

                        case CommandEvents.MissingElement:
                            TryAdd(method, ref MissingElement);
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                    }
                }
            }

            m_records = records.ToArray();
        }