为什么我的静态类没有在ASP.NET MVC中初始化?

时间:2010-10-29 21:45:16

标签: c# iis asp.net-mvc-2 static constructor

我有一个ASP.NET MVC项目,其中包含一个静态类来初始化一些AutoMapper映射:

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

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

在静态构造函数中设置断点告诉我,在运行项目时它从未被击中。我必须在MvcApplication.Application_Start()中明确调用该方法:

AutoMappingConfiguration.SetupMappings();

有谁知道为什么ASP.NET MVC没有构造这个静态类?这是否与IIS的“动态编译”性质有关?如果是这样,我是否必须显式调用静态方法,或者是否有某种方法来配置项目以初始化静态类?

3 个答案:

答案 0 :(得分:11)

除非创建类的实例或调用任何静态方法,否则不会调用静态构造函数,这是documented /期望的行为。因此,您必须调用该静态方法(或类中的任何其他方法)来调用它。

答案 1 :(得分:3)

在第一次使用任何成员之前初始化类。如果您从不使用该类,则永远不会调用静态构造函数。

答案 2 :(得分:1)

我相信代码会被执行而你却看不到它,因为你没有按时附加调试器。

通过编写写入文本文件的代码并查看是否已创建文本文件来验证这一点:

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