Example #1
0
        private static List <FieldInfoHandle> GetFieldInfos(Type objType)
        {
            string key = objType.FullName;
            List <FieldInfoHandle> ret = null;



            if (!_dicFieldInfo.TryGetValue(key, out ret))
            {
                ret = new List <FieldInfoHandle>();
                _dicFieldInfo[key] = ret;

                Type currentType = objType;

                while (currentType != null)
                {
                    FieldInfo[] fInfos = currentType.GetFields(FastValueGetSet.AllBindingFlags);
                    foreach (FieldInfo finfo in fInfos)
                    {
                        GetFieldValueHandle getHandle = FastFieldGetSet.GetGetValueHandle(finfo);
                        SetFieldValueHandle setHandle = FastFieldGetSet.GetSetValueHandle(finfo);
                        FieldInfoHandle     handle    = new FieldInfoHandle(objType, getHandle, setHandle, finfo.FieldType, finfo.Name, finfo);
                        ret.Add(handle);
                    }
                    currentType = currentType.BaseType;
                    if (currentType == typeof(object))
                    {
                        break;
                    }
                }
            }

            return(ret);
        }
Example #2
0
        /// <summary>
        /// 创建属性的信息类
        /// </summary>
        /// <param name="belong">所属的实体</param>
        /// <param name="getHandle">get委托</param>
        /// <param name="setHandle">set委托</param>
        /// <param name="tableMappingAtt">映射标识类</param>
        /// <param name="fieldName">属性名</param>
        /// <param name="fieldType">属性类型</param>
        public EntityMappingInfo(Type belong, GetFieldValueHandle getHandle, SetFieldValueHandle setHandle,
                                 TableRelationAttribute mappingInfo, string fieldName, Type fieldType, FieldInfo belongFieldInfo,
                                 PropertyInfo belongPropertyInfo)

            : base(belong, getHandle, setHandle, fieldType, fieldName, belongFieldInfo)
        {
            this._mappingInfo        = mappingInfo;
            this._belongPropertyInfo = belongPropertyInfo;
        }
Example #3
0
 /// <summary>
 /// 创建属性的信息类
 /// </summary>
 /// <param name="belong">所属的实体信息</param>
 /// <param name="getHandle">get委托</param>
 /// <param name="setHandle">set委托</param>
 /// <param name="ep">字段标识类</param>
 /// <param name="fieldType">字段类型</param>
 /// <param name="fieldName">字段名</param>
 /// <param name="sourceType">源字段类型</param>
 public EntityPropertyInfo(EntityInfoHandle belong, GetFieldValueHandle getHandle, SetFieldValueHandle setHandle,
                           EntityParam paramInfo, Type fieldType, string fieldName, FieldInfo belongFieldInfo, PropertyInfo belongPropertyInfo)
     : base(belong.EntityType, getHandle, setHandle, fieldType, fieldName, belongFieldInfo)
 {
     paramInfo.SqlType   = belong.DBInfo.CurrentDbAdapter.ToCurrentDbType(paramInfo.SqlType);//转换成本数据库支持的数据类型
     this._paramInfo     = paramInfo;
     _belong             = belong;
     _belongPropertyInfo = belongPropertyInfo;
 }
Example #4
0
        public void Init(HttpApplication context)
        {
            PropertyInfoHandle  fileChangesMonitorGet = FastValueGetSet.GetPropertyInfoHandle("FileChangesMonitor", typeof(HttpRuntime));
            object              o       = fileChangesMonitorGet.GetValue(null);
            GetFieldValueHandle f       = FastFieldGetSet.FindGetValueHandle(o.GetType().GetField("_dirMonSubdirs", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase));
            object              monitor = f(o);
            FastInvokeHandler   m       = FastValueGetSet.GetCustomerMethodInfo(monitor.GetType().GetMethod("StopMonitoring", BindingFlags.Instance | BindingFlags.NonPublic));

            m.Invoke(monitor, new object[] { });
        }
Example #5
0
        /// <summary>
        /// 获取字段获取值的委托(带缓存)
        /// </summary>
        /// <param name="info">字段信息</param>
        /// <returns></returns>
        public static GetFieldValueHandle FindGetValueHandle(FieldInfo info)
        {
            GetFieldValueHandle ret = null;
            string key = FastValueGetSet.GetMethodInfoKey(info);

            if (!_dicGet.TryGetValue(key, out ret))
            {
                ret          = GetGetValueHandle(info);
                _dicGet[key] = ret;
            }
            return(ret);
        }
Example #6
0
        /// <summary>
        /// 创建属性的信息类
        /// </summary>
        /// <param name="belong">字段所属的类类型</param>
        /// <param name="getHandle">get委托</param>
        /// <param name="setHandle">set委托</param>
        /// <param name="fieldType">字段数据类型</param>
        /// <param name="fieldName">字段名</param>
        /// <param name="belongFieldInfo">所属的字段反射信息</param>
        public FieldInfoHandle(Type belong, GetFieldValueHandle getHandle,
                               SetFieldValueHandle setHandle, Type fieldType, string fieldName, FieldInfo belongFieldInfo)
        {
            this._getHandle       = getHandle;
            this._setHandle       = setHandle;
            this._fieldType       = fieldType;
            this._fieldName       = fieldName;
            this._belong          = belong;
            this._belongFieldInfo = belongFieldInfo;

            LoadRealFieldType();
        }
Example #7
0
        /// <summary>
        /// 初始化类型的属性信息
        /// </summary>
        /// <param name="type">类型</param>
        /// <returns>如果已经初始化过侧返回false</returns>
        private static void InitClassPropertyInfos(Type type)
        {
            string fullName = type.FullName;

            //实例化本类型的句柄
            CreateInstanceHandler createrHandel = FastValueGetSet.GetCreateInstanceHandlerWithOutCache(type);
            Dictionary <string, PropertyInfoHandle> dicPropertys = new Dictionary <string, PropertyInfoHandle>();
            Dictionary <string, FieldInfoHandle>    dicField     = new Dictionary <string, FieldInfoHandle>();

            //属性信息句柄
            PropertyInfo[] destproper = type.GetProperties(FastValueGetSet.AllBindingFlags);
            FieldInfo[]    allField   = type.GetFields(FastValueGetSet.AllBindingFlags);
            //int index = 0;
            ///读取属性别名
            foreach (PropertyInfo pinf in destproper)
            {
                ///通过属性来反射
                string proName = pinf.Name;

                FastPropertyHandler getHandle = FastValueGetSet.GetGetMethodInfo(proName, type);
                FastPropertyHandler setHandle = FastValueGetSet.GetSetMethodInfo(proName, type);
                if (getHandle != null || setHandle != null)
                {
                    PropertyInfoHandle classProperty = new PropertyInfoHandle(type, getHandle, setHandle, pinf.PropertyType, pinf.Name);
                    dicPropertys.Add(pinf.Name, classProperty);
                }
            }

            ///读取属性别名
            foreach (FieldInfo fInf in allField)
            {
                string proName = fInf.Name;

                GetFieldValueHandle getHandle = FastFieldGetSet.GetGetValueHandle(fInf);
                SetFieldValueHandle setHandle = FastFieldGetSet.GetSetValueHandle(fInf);
                if (getHandle != null || setHandle != null)
                {
                    FieldInfoHandle fieldInfo = new FieldInfoHandle(type, getHandle, setHandle, fInf.FieldType, fInf.Name, fInf);
                    dicField.Add(fInf.Name, fieldInfo);
                }
            }


            ClassInfoHandle classInfo = new ClassInfoHandle(type, createrHandel, dicPropertys, dicField);

            dicClass.Add(fullName, classInfo);
        }
Example #8
0
        /// <summary>
        /// 填充值
        /// </summary>
        /// <param name="objType"></param>
        /// <param name="flags"></param>
        /// <param name="fillBase"></param>
        private static void FillFieldInfos(Type objType, BindingFlags flags, List <FieldInfoHandle> lstRet, Dictionary <string, bool> dicExists)
        {
            FieldInfo[] infos = objType.GetFields(flags);
            foreach (FieldInfo info in infos)
            {
                if (dicExists.ContainsKey(info.Name))
                {
                    continue;
                }

                GetFieldValueHandle getHandle = FastFieldGetSet.GetGetValueHandle(info);
                SetFieldValueHandle setHandle = FastFieldGetSet.GetSetValueHandle(info);
                FieldInfoHandle     handle    = new FieldInfoHandle(objType, getHandle, setHandle, info.FieldType, info.Name, info);
                lstRet.Add(handle);
                dicExists[info.Name] = true;
            }
        }