C#反射之一(Assembly.Load及Assembly.Load.CreateInstance方法介紹)

最近研究設計模式,在學習Terrylee老師的AbstractFactory的時候用到了反射,順便也研究了一下C#的反射機制。收集了網上的一些資料和我個人的理解,供大家學習
       C#中,我們要使用反射,首先要搞清楚以下命名空間中幾個類的關係:
System.Reflection命名空間
(1)   AppDomain:應用程序域,可以將其理解爲一組程序集的邏輯容器
(2)   Assembly:程序集類
(3)   Module:模塊類
(4)   Type:使用反射得到類型信息的最核心的類
他們之間是一種從屬關係,也就是說,一個AppDomain可以包含NAssembly,一個Assembly可以包含NModule,而一個Module可以包含NType.AppDomain這個類我們等下再來講解。我們先關注Assembly個類,在程序中,如果我們要動態加載一個程序集怎麼辦呢?有幾種方式可以使用,分別是Load,LoadFromLoadWithPartialName三個Assembly的靜態方法.
        先來講解Assembly.Load方法,該方法會有多個重載版本,其中一個就是提供程序集的詳細信息,即程序集的標識,包括程序集的名稱,版本,區域信息,公有密鑰標記,全部都是以一個字符串的形式提供,例如:"MyAssembly,Version=1.0.0.0,culture=zh-CN,PublicKeyToken=47887f89771bc57f”.
              那麼,使用Assembly.Load加載程序集的順序是怎樣的呢?首先它會去全局程序集緩存查找,然後到應用程序的根目錄查找,最後會到應用程序的私有路徑查找。
              當然,如果你使用的是弱命名程序集,也即只給出程序集的名稱,那麼這個時候,CLR將不會在程序集上應用任何安全或者部署策略,而且Load也不會到全局緩存程序集中查找程序集。
Assembly.Load("")的使用說明如下;  
  並不是命名空間。常用的是程序集名稱,也就是dll的名稱  
    重載列表    
  名稱     說明      
  Assembly.Load   (AssemblyName)     在給定程序集的   AssemblyName   的情況下,加載程序集。    
  由   .NET   Compact   Framework   支持。    
  Assembly.Load   (Byte[])     加載帶有基於通用對象文件格式   (COFF)   的圖像的程序集,該圖像包含已發出的程序集。將該程序集加載到調用方的域。      
  Assembly.Load   (String)     通過給定程序集的長格式名稱加載程序集。
  由   .NET   Compact   Framework   支持。    
  Assembly.Load   (AssemblyName,   Evidence)     在給定程序集的   AssemblyName   的情況下,加載程序集。使用提供的證據將該程序集加載到調用方的域中。      
  Assembly.Load   (Byte[],   Byte[])     加載帶有基於通用對象文件格式   (COFF)   的圖像的程序集,該圖像包含已發出的程序集。      
  Assembly.Load   (String,   Evidence)     通過給定的程序集的顯示名稱來加載程序集,使用提供的證據將程序集加載到調用方的域中。
  Assembly.Load   (Byte[],   Byte[],   Evidence)     加載帶有基於通用對象文件格式   (COFF)   的圖像的程序集,該圖像包含已發出的程序集。

關於反射Assembly.Load("程序集").CreateInstance("命名空間.類")
而不管在哪一層寫這段代碼其中的("程序集")讀取的實際是web層bin文件夾下的dll,也就是說你反射的類的程序集dll在web層的bin下必須有
注意CreateInstance()一定是命名空間.類名,否則創建的實例爲空
Assembly.Load("程序集名")
Assembly.LoadFrom("程序集實際路徑")

 

原文鏈接http://www.cnblogs.com/wcp066/archive/2008/09/05/1284948.html

 

發佈了6 篇原創文章 · 獲贊 13 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章