调用步骤

  1. Assembly.LoadFrom(string assemblyFile): 加载类库

assemblyFile:尽可能使用全路径

  1. Assembly.GetType(String name): 获取类型

name: 命名空间.类名

  1. Type.GetMethod(string name): 获取方法

  2. Activator.CreateInstance(Type type): 创建类型实例

  3. MethodInfo.Invoke(object obj, object[] parameters): 方法调用

使用

1)Assembly.LoadFrom(string assemblyFile) 与 AppDomain.Load(string assemblyString)

System.AppDomain 也提供了一种Load 方法,他和Assembly的静态Load 方法不一样,AppDomain的load 方法是一种实例方法,返回的是一个对程序集的引用,Assembly的静态Load 方发将程序集按值封装发回给发出调用的AppDomain.尽量避免使用AppDomain 的Load 方法。

2)Type.GetType(string typeName) 与 Assembly.GetType(string name)

Type.GetType()方法有很多重载,其应用场景有所不同。比如:GetType(string typeName, bool throwOnError)方法,其中第一个参数要求传入一个Class的完全限定名,如:”FF.Persistence.Driver.SQLite, FF.Persistence”,第二个参数表示调用此方法异常是否抛出。
关于typeName的说明如下:
1)字符串的首尾不允许有空格,逗号前不允许有空格;
2)区分大小写;
3)完全限定名可以包含逗号后面的namespace,当然也可不包含;
4)使用Type.GetType来进行反射,要明白Type.GetType是非强类型,如果参数typeName表示的目标类型不在当前程序集中,那么会返回null。解决办法是:

  1. var asmb = Assembly.LoadFrom("FF.Persistence.dll") ;
  2. var supType = asmb.GetType("FF.Persistence.Driver.SQLite") ;