转自:http://blog.csdn.net/mm33211/article/details/8143890
C# 根据对象类完整名称,创建对象实例
/// <summary> /// 根据指定的类全名,返回对象实例 /// </summary> /// <param name="objFullName">对象完整名称(包名和类名),如:com.xxx.Test</param> public object createObjectInstance(string objFullName) { //获取当前目录 string currentDir = Assembly.GetExecutingAssembly().Location; currentDir = currentDir.Substring(0, currentDir.LastIndexOf(‘\\‘)); DirectoryInfo di = new DirectoryInfo(currentDir); //获取当前目录下的所有DLL文件 FileInfo[] files = di.GetFiles("*.dll");//只查.dll文件 //遍历所有文件,查找需要对象的实现定义 Type type = Type.GetType(objFullName); if (type == null) { foreach (FileInfo fi in files) { type = getObjectType(fi.FullName, objFullName); if (type != null) { break; } } } if (type == null) { //throw new Exception("can not find class define of " + objFullName); return null; } //将对象实例化 object obj=Activator.CreateInstance(type); return obj; } /// <summary> /// 从DLL文件中查找指定的对象定义 /// </summary> /// <param name="dllFile">DLL文件路径</param> /// <param name="objFullName">对象完整名称(包名和类名),如:com.xxx.Test</param> /// <returns>如果找到,返回其对应的Type;如果没找到,则返回null</returns> private Type getObjectType(string dllFile, string objFullName) { Type type = Assembly.LoadFile(dllFile).GetType(objFullName); if (type != null) { Console.WriteLine("find obj in dll[" + dllFile + "]"); return type; } return null; }
时间: 2024-11-14 13:45:27