예제 #1
0
        ModelMeta TypeToModelMeta(Type type)
        {
            var serializeAttribute = type.GetCustomAttributes()
                                     .FirstOrDefault(attr => attr.GetType().Name == "SerializeAttribute");
            var cacheAttribute = type.GetCustomAttributes()
                                 .FirstOrDefault(attr => attr.GetType().Name == "MainCacheAttribute");
            var persistenceAttribute = type.GetCustomAttributes()
                                       .FirstOrDefault(attr => attr.GetType().Name == "PersistenceAttribute");

            var props  = cacheAttribute?.GetType().GetProperties();
            var fields = cacheAttribute?.GetType().GetFields();

            var modelMeta = new ModelMeta()
            {
                Type           = type,
                Serialize      = serializeAttribute != null,
                RedisCacheName = (string)cacheAttribute?.GetType().GetProperty("CacheName").GetValue(cacheAttribute, null),
                MysqlTableName = (string)persistenceAttribute?.GetType().GetProperty("DbTableName").GetValue(persistenceAttribute, null),
            };

            modelMeta.Fields =
                type.GetFields().Select((f, p) => FieldToMeta(modelMeta, f, p)).ToList();

            if (cacheAttribute != null || persistenceAttribute != null)
            {
                modelMeta.Key =
                    modelMeta.Fields.FirstOrDefault(
                        f => f.Field.GetCustomAttributes(true).Any(a => a.GetType().Name == "KeyAttribute"));
            }

            return(modelMeta);
        }
예제 #2
0
        FieldMeta FieldToMeta(ModelMeta model, FieldInfo field, int pos)
        {
            if (field.IsPublic)
            {
                var serializeAttribute = field.GetCustomAttributes()
                                         .FirstOrDefault(attr => attr.GetType().Name == "FieldIndexAttribute");
                return(new FieldMeta()
                {
                    Field = field,
                    ModelMeta = model,
                    Position = (uint)pos + 1,
                    SerializeIndex = (uint)(serializeAttribute != null? (byte)serializeAttribute.GetType().GetProperty("Index").GetValue(serializeAttribute, null):0),
                });
            }

            return(null);
        }
        FieldMeta FieldToMeta(ModelMeta model, FieldInfo field, int pos)
        {
            if (field.IsPublic)
            {
                var serializeAttribute = field.GetCustomAttributes()
                .FirstOrDefault(attr => attr.GetType().Name == "FieldIndexAttribute");
                return new FieldMeta()
                {
                    Field = field,
                    ModelMeta = model,
                    Position = (uint)pos + 1,
                    SerializeIndex = (uint)(serializeAttribute!=null? (byte)serializeAttribute.GetType().GetProperty("Index").GetValue(serializeAttribute, null):0),
                };
            }

            return null;
        }
        ModelMeta TypeToModelMeta(Type type)
        {
            var serializeAttribute = type.GetCustomAttributes()
                .FirstOrDefault(attr => attr.GetType().Name == "SerializeAttribute");
            var cacheAttribute = type.GetCustomAttributes()
                .FirstOrDefault(attr => attr.GetType().Name == "MainCacheAttribute");
            var persistenceAttribute = type.GetCustomAttributes()
                .FirstOrDefault(attr => attr.GetType().Name == "PersistenceAttribute");

            var props = cacheAttribute?.GetType().GetProperties();
            var fields = cacheAttribute?.GetType().GetFields();

            var modelMeta = new ModelMeta()
            {
                Type = type,
                Serialize = serializeAttribute!=null,
                RedisCacheName = (string)cacheAttribute?.GetType().GetProperty("CacheName").GetValue(cacheAttribute, null),
                MysqlTableName = (string)persistenceAttribute?.GetType().GetProperty("DbTableName").GetValue(persistenceAttribute, null),
            };

            modelMeta.Fields =
                type.GetFields().Select((f,p) => FieldToMeta(modelMeta, f, p)).ToList();

            if (cacheAttribute != null || persistenceAttribute != null)
            {
                modelMeta.Key =
                    modelMeta.Fields.FirstOrDefault(
                        f => f.Field.GetCustomAttributes(true).Any(a => a.GetType().Name == "KeyAttribute"));
            }

            return modelMeta;
        }