2010-10-29 72 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

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

相关问题