在.net core 1.1環境下
今天項目中遇到這個問題了,稍微查了一下並沒有現成的樣例。自己實現了。
1 static void Main(string[] args) 2 { 3 TestGetAssembly(); 4 }
static void TestGetAssembly() { AssemblyName name=new AssemblyName("Reflect");//我的程序集的名稱為"Reflect" var result = Assembly.Load(name); Console.WriteLine(result.FullName); TestGetIntance(result); } static void TestGetIntance(Assembly assembly) { Users user= (Users)assembly.CreateInstance("Reflect.Users");//這里要寫的格式為“命名空間.類名稱”,切記! user.ID = 1; Console.WriteLine(user.ID); }
更新:
發現了一種更簡單的方法(構造函數無參數的情況)
public T GetInstance<T>(string instanceName) { return (T)Assembly.Load(Assembly.GetAssembly(typeof(T)).GetName().Name).CreateInstance(typeof(T).Namespace+"."+instanceName); }
構造函數有參的情況(參數param 表示要傳遞給生成實例構造函數的參數)
public static T GetInstance<T>(string instanceName,params object[] param) { return (T)Assembly.Load(Assembly.GetAssembly(typeof(T)).GetName().Name).CreateInstance(typeof(T).Namespace+"."+instanceName,true,BindingFlags.CreateInstance,null, param,Thread.CurrentThread.CurrentCulture,null); }
查看程序集的名稱方法為右鍵項目,點擊屬性就可以查看到程序集名稱,和命名空間了。