反射工厂【ReflectionFactory】

来源:互联网 发布:instabox 软件 编辑:程序博客网 时间:2024/06/16 10:00

 

 

 

    /// <summary>    /// 反射工厂    /// </summary>    public static class ReflectionFactory    {        private static Dictionary<ETaskType, Type> mDic;        /// <summary>        /// 加载所有的可用的Task        /// </summary>        public static void LoadTask()        {            // 只加载一次            if (mDic != null)                return;            try            {                mDic = new Dictionary<ETaskType, Type>();                string strNamespace = typeof(TaskClass).Namespace;                foreach (Type type in Assembly.GetExecutingAssembly().GetTypes())                {                    if (!IsTask(strNamespace, type))                        continue;                    TaskClass obj = Activator.CreateInstance(type) as TaskClass;                    if (obj != null && !mDic.ContainsKey(obj.TaskType))                    {                        mDic.Add(obj.TaskType, type);                    }                }            }            catch (Exception)            {            }        }        /// <summary>        /// 根据类型获取Task        /// </summary>        /// <param name="type"></param>        /// <returns></returns>        public static TaskClass GetTask(ETaskType type)        {            if (mDic == null)                return null;            // 规则约定 详细见 ETaskType 枚举注释            if ((int)type < (int)ETaskType.SimpleTask)            {                type = ETaskType.SimpleTask;            }            try            {                if (mDic.ContainsKey(type))                    return Activator.CreateInstance(mDic[type]) as TaskClass;            }            catch (Exception)            {            }            return null;        }        private static bool IsTask(string strNamespace, Type type)        {            return type.IsClass && !type.IsAbstract && strNamespace.Equals(type.Namespace) && type.IsSubclassOf(typeof(TaskClass));        }    }


 

0 0
原创粉丝点击