//dll路径
string path = “”;
Assembly assem = Assembly.LoadFile(path);
Type[] tys = assem.GetTypes();//只好得到所有的类型名,然后遍历,通过类型名字来区别了
foreach (Type ty in tys)//huoquleiming
{
//string name = ty.Name.Remove(0);
// name = ty.Name.Remove(name.Length);
//string[] nameAttr = name.Split('.');
//类名
if (ty.Name== “”)
{
ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes);//获取不带参数的构造函数,如果有构造函数且没有不带参数的构造函数时,这儿就不能这样子啦
object magicClassObject = magicConstructor.Invoke(new object[] { }); //方法名称
MethodInfo mi = ty.GetMethod("Execute");
//具体需要的参数,根据方法替换
IServiceProvider[] param = { serviceProvider };
object aa = mi.Invoke(magicClassObject, param);//方法有参数时,需要把null替换为参数的集合
}
}
根据需求动态new class
//根据需求改取值方式
string assemblyName = "BuilderAssebmiy";
//根据需求改取值方式
string builderName = "BuilderClass";
Assembly assembly = Assembly.Load(assemblyName);
Type t = assembly.GetType(builderName);
Builder builder = Activator.CreateInstance(t) as Builder;
// House house = GameManaGer.CreateHouse(builder);
/// <summary>
/// 根据方法名执行方法
/// </summary>
/// <param name="assemblyName">程序集</param>
/// <param name="nameSpace">命名空间</param>
/// <param name="className">类名</param>
/// <param name="funcName">方法名</param>
/// <param name="param">输入参数</param>
public void GetMethodResult(string assemblyName, string nameSpace, string className, string funcName, params string[] param)
{
try
{
Assembly asmb = null;
Type type = null;
if (assemblyName.Trim() == "") //如果使用外部引用
{
asmb = Assembly.LoadFrom(assemblyName); //调用的DLL程序集
type = asmb.GetType(string.Concat(nameSpace, ".", className)); //类类型
}
else
{
type = Type.GetType(string.Concat(nameSpace, ".", className)); //类类型
}
object dObj = Activator.CreateInstance(type); //在本地或从远程创建对象类型(类或结构都可以)
MethodInfo method = type.GetMethod(funcName); //获取方法
BindingFlags flag = BindingFlags.Public | BindingFlags.Instance; //调用方法的一些标志位,这里的含义是Public并且是实例方法,这也是默认的值
object[] parameters = new object[] { param }; //方法的输入参数
object returnValue = method.Invoke(dObj, flag, Type.DefaultBinder, parameters, null); //取得方法返回的值
}
catch (Exception ex)
{
string ExStr = ex.Message;
}
}