利用Assembly動態載入程式集

iDotNetSpace發表於2009-07-29
在程式開發中,經常需要呼叫到外部的DLL,所以需要反射技術,動態的載入程式集,方便呼叫.
例如我們建立一個這樣的類:

利用Assembly動態載入程式集
namespace User
{
    
public class ShowName
    {
        
public ShowName()
            : 
this("")
        { }
        
public ShowName(string Name)
        {
            name 
= Name;
        }

        
public string Name
        {
            
get { return name; }
            
set { name = value; }
        }
        
private string name;

        
public void ShowMe()
        {
            Console.WriteLine(
"I'm " + name);
        }
        
public static int Main()
        {
            Console.WriteLine(
"location in User");
            
return 0;
        }
    }
   
}

在一般情況下,我們只需要在程式碼中這樣呼叫就可以:

利用Assembly動態載入程式集
    public class Program
    {
        
static void Main(string[] args)
        {
            ShowName sn 
= new ShowName("Alex");
            sn.ShowMe();
            Console.ReadLine();            
        }
    }

如果需要在程式執行時動態載入,就需要用到Assembly類來實現,注意:(把上面的第一段程式碼,生成一個叫User.Dll)
一、Assembly.Load
這個方法接受一個AssemblyName例項作為一個引數,返回對應的程式集,實現的方法如下:
利用Assembly動態載入程式集
    public class Program
    {
        
static void Main(string[] args)
        {
            Assembly a 
= Assembly.Load("User");
            Type t 
= a.GetType("User.ShowName");

            
foreach (MethodInfo mf in t.GetMethods())
            {
                Console.WriteLine(mf.Name);   
//輸出User.dll裡面的所有方法
            }
            
object user = a.CreateInstance(t.FullName);

            
object[] name = new object[1];   //新建一個陣列,把引數傳進去
            name[0= "Alex";

            MethodInfo setname 
= t.GetMethod("set_Name");   //這個set_Name就是Name的set方法            
            setname.Invoke(user, name);                     //這裡把name引數傳進去

            MethodInfo show 
= t.GetMethod("ShowMe");
            show.Invoke(user, 
null);

            Console.ReadLine();            
        }
    }

這裡輸出的結果為:
get_Name
set_Name
ShowMe
Main
ToString
Equals
GetHashCode
GetType
I'm Alex

二、Assembly.LoadForm方法
該方法根據程式集的檔名與路徑來載入程式集。

三、Assembly.LoadWithPartialName方法
該方法使用部分名稱從應用程式目錄或從全域性程式集快取載入程式集。

當然還要他們還可以實現部分引用,也就是可以通過程式集的名稱,版本,公鑰等等,只要在後面加上
Assembly a = Assembly.Load("User,version=1.0.0.0")來控制就可以了

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-610729/,如需轉載,請註明出處,否則將追究法律責任。

相關文章