Как реализовать ConfigurationElement в C #? - PullRequest
0 голосов
/ 16 февраля 2010

Вот ошибка, которую я получаю с кодом, вставленным ниже.

Невозможно создать экземпляр класса ZDRCreatorTests.ZDRCreatorTests. Ошибка: System.Configuration.ConfigurationErrorsException: Невозможно проанализировать значение по умолчанию свойства indexedFolder. Ошибка: Невозможно найти преобразователь, который поддерживает преобразование в / из строки для свойства indexedFolder типа DirectoryInfo.

namespace ZDRCreator
{
    public class ZDRCreatorElement : ConfigurationElement
    {
        // Create the element.
        public ZDRCreatorElement()
        { }

        // Get or set the IndexedFolder
        [ConfigurationProperty("indexedFolder", DefaultValue = "", IsRequired = true)]
        public DirectoryInfo IndexedFolder {
            get { return (DirectoryInfo)this["indexedFolder"]; }
            set { this["indexedFolder"] = value; }
        }

        // Get or set the OutputFolder
        [ConfigurationProperty("outputFolder", DefaultValue = "", IsRequired = true)]
        public DirectoryInfo OutputFolder {
            get { return (DirectoryInfo)this["outputFolder"]; }
            set { this["outputFolder"] = value; }
        }

        // Get or set the ZDRFile 
        [ConfigurationProperty("ZDRFile", DefaultValue = "", IsRequired = true)]
        public FileInfo ZDRFile {
            get { return (FileInfo)this["ZDRFile"]; }
            set { this["ZDRFile"] = value; }
        }

        // Get or set the overwriteOutput flag
        [ConfigurationProperty("overwriteOutput", DefaultValue = "false", IsRequired = true)]
        public bool OverwriteOutput {
            get { return (bool)this["overwriteOutput"]; }
            set { this["overwriteOutput"] = value; }
        }

        // Get or set the OutputFile
        [ConfigurationProperty("outputFile", DefaultValue = "", IsRequired = true)]
        public String OutputFile {
            get { return (String)this["outputFile"]; }
            set { this["outputFile"] = value; }
        }
        // Get or set the OutputFile
        [ConfigurationProperty("pathMask", DefaultValue = "", IsRequired = true)]
        public String PathMask {
            get { return (String)this["pathMask"]; }
            set { this["pathMask"] = value; }
        }
    }
}

Я понимаю, что ошибка в том, что я пытаюсь поместить строку в объект DirectoryInfo. Мой вопрос заключается в следующем: я предполагаю, чтобы хранить только строки или примитивные типы данных, прочитанные из XML, а затем преобразовать их в другие объекты после прочтения XML? ИЛИ, есть ли место, где я могу пойти дальше и встроить их в объект, который будет использоваться внутри. Где будет происходить проверка ввода?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Вы можете добавить TypeConventerAttribute с конвертером, который преобразует строку (которая будет получена из конфигурации) из / в DirectoryInfo. Преобразователь является классом, производным от TypeConverter .

[ConfigurationProperty("ZDRFile", DefaultValue = "", IsRequired = true)]
[TypeConverter(typeof(YourCustomFileInfoTypeConverter))]
public FileInfo ZDRFile {
    get { return (FileInfo)this["ZDRFile"]; }
    set { this["ZDRFile"] = value; }
}
1 голос
/ 16 февраля 2010

Я знаю, что это не дает прямого ответа на ваш вопрос, но я настоятельно рекомендую вам взглянуть на проект Конструктора разделов конфигурации на CodePlex .

Это даст вам время разработки для разделов конфигурации в вашем приложении, генерируя код класса для вас из конструктора, а также шаблоны для помещения их в ваш файл конфигурации.

Необходимость делать все это самостоятельно, очень утомительно, и я еще не сталкивался с ситуацией, когда конструктор разделов конфигурации не обрабатывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...