1. 程式人生 > >ASP.NET 型別初始值設定項引發異常

ASP.NET 型別初始值設定項引發異常

連續兩天都為這個執行時錯誤“型別初始值設定項引發異常”而煩惱,除錯也不知道哪裡出了問題。上網Google一下,一大堆相同的問題,可是按照那些方法折騰來折騰去,問題還是一樣。最後在CSDN上發帖子問了,果然“重賞之下必有勇夫”,很快就有高手回覆了,問題也隨著解決了。哈哈。在此寫個隨筆,以後如果大家遇到類似問題,也可參考一下,自己也做個備忘,不然放在電腦上,又找不到,我的電腦檔案到處亂放,有時連我自己都找不到^_^。
  問題是這樣嘀:
  專案採用了三層架構和工廠模式,並借鑑了PetShop的架構,因為這個專案也是採用分散式的資料庫,目前只有三個資料庫,主要出於提高訪問效能考慮。
  原來是按照網上對PetShop的介紹來給各專案新增引用的。

  1、Web 引用 BLL。 
     2、BLL 引用 IDAL,Model,使用DALFactory建立例項。 
     3、IDAL 引用 Model。  
     4、Model 無引用。  
     5、DALFactory 引用IDAL,通過讀取web.config裡設定的程式集,載入類的例項,返回給BLL使用。  
     6、SQLServerDAL 引用 Model和IDAL,被DALFactory載入的程式集,實現接口裡的方法。
    問題就出在這裡了。頂!
    按照PetShop的架構,是DALFactory程式集裡通過反射建立針對特定資料訪問層裡的對應類例項,這樣BLL呼叫介面時就知道呼叫這個對應類例項裡的實現方法。

    而反射動態載入程式集是通過這種方法 Assembly.Load("程式集").CreateInstance("名稱空間.類"),其中的“程式集”讀取的是Web層bin資料夾下對應的dll,即反射載入的程式集dll在Web層的bin資料夾必須有,不然就會出現如題的錯誤。問題解決了~^_^
    出現這種錯誤的另兩種情況,這也是在網上看到的,一起寫下來。
    一、Web.config配置錯誤。
          在DALFactory程式集裡的DataAccess類裡,通過
          private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];

          來獲得程式集的名稱的。
          在Web.config裡我的配置如下:
          <appSettings>
          <add key="WebDAL" value="PDMS.SQLServerDAL"/>
          </appSettings>
    二、程式集名稱和預設名稱空間錯誤。
          在各個程式集右鍵--屬性