Вопрос о TypeInitializationException - PullRequest
0 голосов
/ 16 ноября 2018

Я заметил кое-что, чего совершенно не понимаю. У меня есть класс ConfigurationProvider, который загружает значения конфигурации из базы данных, а затем класс Configuration, который анализирует их и делает их доступными для остальной части моего приложения. (На самом деле я анализирую xml конфигурацию, но, например, я просто заменю ее на long)

public class ConfigurationProvider
{
    public static ConfigurationProvider Provider { get; } = new ConfigurationProvider();    

    public string GetParameter()
    {
        // gets configuration parameter from database
    }
}

public class Configuration
{
    public static long Parameter { get; } = long.Parse(ConfigurationProvider.Provider.Parameter);
}

В случае, если в базе данных нет действительного значения, TypeInitializationException будет выброшено при доступе к Configuration.Parameter;, тогда, когда я изменяю значение в базе данных и снова получаю доступ к Configuration.Parameter;, я все равно получаю точно такое же исключение.

Итак, мой вопрос: почему это происходит? Можете ли вы указать мне некоторые документы об этом? Насколько я понимаю, public static long Parameter { get; } следует инициализировать только один раз, как только класс Configuration будет доступен в первый раз. Но исключение заставляет меня чувствовать, что эта инициализация не удалась и должна быть выполнена еще раз. Или это означает, что Parameter на самом деле был инициализирован и теперь ссылается на данное исключение?

ps: я знаю, как это исправить, чтобы не нуждаться в коде, я просто хочу лучше понять эту проблему, чем сейчас.

...