Свойство конфигурации Sitefinity null, даже сразу после установки

Я создал новый файл конфигурации Special.config:

<?xml version="1.0" encoding="utf-8"?>

<SpecialConfig xmlns:config="urn:telerik:sitefinity:configuration" xmlns:type="urn:telerik:sitefinity:configuration:type" config:version="10.0.6401.0">
  <UnicornSettings HornSize="#{HornSize}" HoofColor="#{HoofColor}" />
</SpecialConfig>

Затем следуйте документации, чтобы настроить пару классов (и зарегистрировать конфигурацию в файле Global.asax.cs):

public class SpecialConfig : ConfigSection
{
    public UnicornSettingsElement UnicornSettings
    {
        get
        {
            return (UnicornSettingsElement)this["UnicornSettings"];
        }
        set
        {
            this["UnicornSettings"] = value;
        }
    }
}

public class UnicornSettingsElement : ConfigElement
{
    public UnicornSettingsElement(ConfigElement parent) : base(parent)
    {

    }
    public String HornSize
    {
        get
        {
            return (String)this["HornSize"];
        }
        set
        {
            this["HornSize"] = value;
        }
    }
    public String HoofColor
    {
        get
        {
            return (String)this["HoofColor"];
        }
        set
        {
            this["HoofColor"] = value;
        }
    }
}

Но даже после явного создания экземпляра SpecialConfig.UnicornSettings он все еще равен нулю:

UnicornSettings config = Config.Get<UnicornSettings>();
config.UnicornSettings = new UnicornSettingsElement(config);
config.UnicornSettings.HornSize = HornSize; //<-- config.UnicornSettings is null
config.UnicornSettings.HoofColor = HoofColor;

ConfigManager manager = ConfigManager.GetManager();
manager.SaveSection(config);

Я понятия не имею, как преодолеть это конкретное исключение, где ссылка является нулевой сразу после установки. Кто-нибудь видит, что мне не хватает?

Обновить

После дальнейшей игры, я думаю, что-то не так с геттером или сеттером в SpecialConfig.UnicornSettings... Хотя я не уверен, что это может быть.


ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

Я понимаю, что такое исключение с нулевой ссылкой, и вообще говоря, как определить и преодолеть исключение с нулевой ссылкой. Это не дубликат конкретного вопроса C#, ответ на который является очень неспецифической информационной книгой. Это конкретный и точный случай, включающий конкретные рамки, которые требуют своего собственного вопроса.


1 ответ

Решение

Забыли настройки конфигурации. Я предполагаю, что они необходимы для доступа к свойствам getter/setter:

public class SpecialConfig : ConfigSection
{
    [ConfigurationProperty("UnicornSettings")]
    public UnicornSettingsElement UnicornSettings
    {
        get
        {
            return (UnicornSettingsElement)this["UnicornSettings"];
        }
        set
        {
            this["UnicornSettings"] = value;
        }
    }
}

public class UnicornSettingsElement : ConfigElement
{
    public UnicornSettingsElement(ConfigElement parent) : base(parent)
    {

    }
    [ConfigurationProperty("HornSize", IsRequired = true)]
    public String HornSize
    {
        get
        {
            return (String)this["HornSize"];
        }
        set
        {
            this["HornSize"] = value;
        }
    }
    [ConfigurationProperty("HoofColor", IsRequired = true)]
    public String HoofColor
    {
        get
        {
            return (String)this["HoofColor"];
        }
        set
        {
            this["HoofColor"] = value;
        }
    }
}
Другие вопросы по тегам