Я пытаюсь написать класс IXmlSerializable
, который синхронизируется с файлом XML. Файл XML имеет следующий формат:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<logging>
<logLevel>Error</logLevel>
</logging>
...potentially other sections...
</configuration>
У меня есть класс DllConfig
для всего XML-файла и класс LoggingSection
для представления <logging>
и его содержимого, т. Е. <logLevel>
. DllConfig
обладает этим свойством:
[XmlElement(ElementName = LOGGING_TAG_NAME,
DataType = "LoggingSection")]
public LoggingSection Logging { get; protected set; }
То, что я хочу, - чтобы файл XML базы данных обновлялся (то есть переписывался), когда установлено свойство. У меня уже есть DllConfig
, когда установлено Logging
. Тем не менее, как я должен делать это, когда установлен Logging.LogLevel
? Вот пример того, что я имею в виду:
var config = new DllConfig("path_to_backing_file.xml");
config.Logging.LogLevel = LogLevel.Information; // not using Logging setter, but a
// setter on LoggingSection, so how
// does path_to_backing_file.xml
// have its contents updated?
Мое текущее решение - иметь класс SyncedLoggingSection
, который наследуется от LoggingSection
, а также принимает экземпляр DllConfig
в конструкторе. Он объявляет new LogLevel
, что, когда установлено, обновляет LogLevel
в базовом классе, а также использует заданный DllConfig
для записи всего DllConfig
в файл XML поддержки. Это хорошая техника?
Я не думаю, что смогу просто сериализовать SyncedLoggingSection
сам по себе в резервный XML-файл, потому что будет записано не все содержимое, а только узел <logging>
. Затем я получу XML-файл, содержащий только раздел <logging>
с его обновленным <logLevel>
, вместо всего файла конфигурации с обновленным <logLevel>
. Следовательно, мне нужно передать экземпляр DllConfig
в SyncedLoggingSection
.
Похоже, что мне нужен обработчик событий, один из DllConfig
, который бы замечал, когда были заданы определенные свойства (т.е. LogLevel
) в его свойствах (то есть Logging
). Возможна ли такая вещь?