类帮助文件

来源:互联网 发布:樱桃初夏网络剧 编辑:程序博客网 时间:2024/05/22 08:29
 public partial class ClassHelper
    {
        public static object GetObject(string className, params object[] paras)
        {
            return GetObject<object>(className, paras);
        }


        public static T GetObject<T>(string className, params object[] paras)
            where T : class
        {
            Type type = GetType(className);
            return GetObject<T>(type, paras);
        }


        public static T GetObject<T>(Type type, params object[] paras)
            where T : class
        {
            if (type == null)
            {
                return null;
            }
            List<Type> paraTypes = new List<Type>();
            for (int i = 0; i < paras.Length; i++)
            {
                object para = paras[i];
                if (para == null)
                {
                    throw new Exception("利用构造函数生成类时,参数不能为null");
                }
                Type pt = para.GetType();
                paraTypes.Add(pt);
            }
            ConstructorInfo ci = type.GetConstructor(paraTypes.ToArray());
            object obj = ci.Invoke(paras);
            return obj as T;
        }


        public static Type GetType(string vClassName)
        {
            string vAssembly = string.Empty;
            if (vClassName.IndexOf(',') > -1)
            {
                string[] collection = vClassName.Split(new char[]
{
','
});
                List<string> list = new List<string>();
                list.AddRange(collection);
                vClassName = list[0];
                list.RemoveAt(0);
                string text = string.Join(",", list.ToArray()).Trim();
                vAssembly = text;
                if (text.ToLower().EndsWith(".dll"))
                {
                }
                else
                {
                    vAssembly = text;
                }
            }
            vClassName = vClassName.Trim();


            Assembly ass = GetAssemble(vAssembly);


            return GetType(ass, vClassName);
        }




        public static Type GetType(Assembly vAssembly, string vTypeName)
        {
            if (string.IsNullOrEmpty(vTypeName))
            {
                return null;
            }
            vTypeName = vTypeName.Trim();
            Type type = vAssembly.GetType(vTypeName);
            if (type == null)
            {
                string vAssName = vAssembly.FullName;
                int vPos = vAssName.IndexOf(",");
                if (vPos > 0)
                {
                    vAssName = vAssName.Substring(0, vPos);
                }
                throw PiaostException.Create("[{0}]中不存在类[{1}]", vAssName, vTypeName);
            }
            return type;
        }


        public static Assembly GetAssemble(string vAssembly)
        {
            if (string.IsNullOrEmpty(vAssembly))
            {
                return GetDefaultAssemble();
            }
            else if (vAssembly.ToLower().Trim().EndsWith(".dll"))
            {
                return GetAssembleWithDll(vAssembly);
            }
            else
            {
                return GetAssembleWithAssembly(vAssembly);
            }
        }


        public static Assembly GetAssembleWithDll(string vDll)
        {
            if (string.IsNullOrEmpty(vDll))
            {
                return GetDefaultAssemble();
            }
            vDll = vDll.Trim();


            Assembly assembly = null;
            try
            {
                assembly = Assembly.LoadFrom(vDll);
            }
            catch { }
            if (assembly == null)
            {
                throw new Exception("程序集[" + vDll + "]不存在!");
            }
            return assembly;
        }


        public static Assembly GetAssembleWithAssembly(string vAssemblyName)
        {
            if (string.IsNullOrEmpty(vAssemblyName))
            {
                return GetDefaultAssemble();
            }
            vAssemblyName = vAssemblyName.Trim();


            Assembly assembly = null;
            try
            {
                assembly = Assembly.Load(vAssemblyName);
            }
            catch { }
            if (assembly == null)
            {
                throw new Exception("命名空间[" + vAssemblyName + "]不存在!");
            }
            return assembly;
        }


        private static Assembly GetDefaultAssemble()
        {
            return Assembly.GetExecutingAssembly();
        }
    }
0 0
原创粉丝点击