Где добавить код инициализации в библиотеку классов?

У меня есть библиотека классов, использующая библиотеку ValueInjecter. В некоторых случаях мне нужно создать пользовательские карты, и я не уверен, куда мне нужно поместить вызов(ы) Mapper.AddMap().

Если бы я использовал это в приложении с основной точкой входа, я мог бы сделать что-то вроде этого:

public static void Main(string[] args)
{
    InitialiseMappings();
}

void InitialiseMappings()
{
    Mapper.AddMap<TypeA, TypeB>(src = > { 
        // Mapping code... 
    });

    Mapper.AddMap<TypeC, TypeD>(src = > { 
        // Mapping code... 
    });

    // etc.
}

В библиотеке классов нет простого способа запустить код «инициализации», поэтому я не уверен, как к этому подойти. Код нельзя вызывать несколько раз, так как попытка добавить повторяющиеся/идентичные сопоставления вызывает исключение.

Где я должен поместить код для создания этих карт?


person Jake    schedule 15.02.2016    source источник
comment
В статическом конструкторе класса, потребляющего карты?   -  person Frédéric Hamidi    schedule 15.02.2016


Ответы (1)


Вы можете добавить его в статический конструктор.

public class SomeClass {
    static SomeClass() {
        InitialiseMappings();
    }
}
person Maarten    schedule 15.02.2016
comment
Что делать, если эта карта используется в нескольких классах? - person Jake; 15.02.2016
comment
Я не уверен, в чем проблема. Код в статическом конструкторе запускается один раз. Создайте свои сопоставления один раз в этом месте. - person Maarten; 15.02.2016
comment
Да, я понимаю это. Я спрашиваю, что мне делать, если конкретное сопоставление используется в двух разных классах, поскольку я не могу создать его дважды. - person Jake; 15.02.2016
comment
Вы можете вызвать статический метод в классе A из статического конструктора класса B. Таким образом, один вызовет другой, если другой еще не запущен. - person Maarten; 15.02.2016