2010-10-29 116 views
1

我有了一個靜態類,它初始化一些AutoMapper映射一個ASP.NET MVC項目:爲什麼我的靜態類沒有在ASP.NET MVC初始化?

static class AutoMappingConfiguration 
{ 
    static AutoMappingConfiguration() 
    { 
     SetupMappings(); 
    } 

    static void SetupMappings() 
    { 
     AutoMap.CreateMap<Product, ProductDTO>(); 
     // more mappings 
    } 
} 

在靜態構造函數中設置斷點讓我發現,當我運行該項目它從來沒有擊中。我必須顯式調用MvcApplication.Application_Start()方法:

AutoMappingConfiguration.SetupMappings(); 

有誰知道爲什麼這個靜態類沒有被ASP.NET MVC構建的?這是否與IIS的'即時編譯'性質有關?如果是這樣,我必須顯式調用靜態方法,還是有一些配置項目來初始化靜態類的方法?

回答

9

靜態構造函數,除非創建要麼類的實例或不叫任何靜態方法被調用,那是documented /預期的行爲。所以你必須調用靜態方法(或類中的任何其他方法)才能調用它。

+0

你不必調用一個方法,你只需要使用任何成員。 – Guffa 2010-10-29 22:02:22

+0

是的,確切地說:以任何方式使用它。 – steinar 2010-10-29 23:25:34

+0

哇謝謝,我從來沒有意識到這一點。這是我創建的第一個靜態類,我只希望構造函數執行。 – 2010-10-29 23:45:10

0

我相信代碼不會得到執行,你看不到它,因爲你不重視時間的調試器。

由具有寫入文本文件,並查看是否文本文件已創建的代碼進行驗證:

static AutoMappingConfiguration() 
{ 
    File.WriteAllText("C:\\mytestfile.txt", "AutoMappingConfiguration executed"); 
    SetupMappings(); 
} 
3

類第一次任何它的成員在使用之前被初始化。如果你從不使用類,靜態構造函數永遠不會被調用。

相關問題