/// <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;
}