Почему мой статический класс не инициализируется в ASP.NET MVC? - PullRequest
2 голосов
/ 30 октября 2010

У меня есть проект 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 ]

11 голосов
/ 30 октября 2010

Статический конструктор не вызывается, если не создан экземпляр класса или не вызван какой-либо статический метод, это документированное / ожидаемое поведение.Поэтому вам нужно вызвать этот статический метод (или любой другой метод в классе), чтобы он вызывался.

3 голосов
/ 30 октября 2010

Классы инициализируются до первого использования любого из его членов.Если вы никогда не используете класс, статический конструктор никогда не вызывается.

1 голос
/ 30 октября 2010

Я полагаю, что код действительно выполняется, и вы не видите его, потому что вы не подключаете отладчик вовремя.

Проверьте это, имея код, который записывает в текстовый файл и проверяет, является ли текстовый файлсоздано:

static AutoMappingConfiguration()
{
    File.WriteAllText("C:\\mytestfile.txt", "AutoMappingConfiguration executed");
    SetupMappings();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...