У меня есть набор пользовательских классов управления конфигурацией XML в .NET.
В моем приложении есть две области конфигурации:
Пользователь : настройка применяется к пользователю независимо от того, в какую учетную запись он вошел. Хранится в файле конфигурации XML в каталоге пользователя.
Пользователь / учетная запись: настройка применяется к пользователю при входе в конкретную учетную запись. Хранится в файле конфигурации XML в каталоге пользователя в отдельном подкаталоге учетной записи.
Два XML-документа имеют одинаковую структуру и могут быть изменены вручную. Когда приложение запускается, я считываю конфигурацию XML из профиля пользователя и конфигурацию XML из каталога User / Account. Затем я объединяю два XML-документа в один XDocument, а затем десериализирую XML в объекты, смоделированные по разделам XDocument. Если присутствует настройка уровня пользователя / учетной записи, она должна переопределить настройку уровня пользователя. Пример:
Файл пользователя:
<FileSettings>
<DownloadPath>C:\downloads</DownloadPath>
<UploadPath>C:\uploads</UploadPath>
</FileSettings>
Файл пользователя / учетной записи для учетной записи XYZ:
<FileSettings>
<DownloadPath>C:\newlocation\xyz\mystuff</DownloadPath>
</FileSettings>
Результат после слияния:
<FileSettings>
<DownloadPath>C:\newlocation\xyz\mystuff</DownloadPath>
<UploadPath>C:\uploads</UploadPath>
</FileSettings>
В приведенном выше примере объект FileSettings с 2 свойствами - DownloadPath и UploadPath будет создан из раздела.
Вот моя проблема: Я понятия не имею, из какого файла конфигурации (т.е. области) пришли DownloadPath и UploadPath. В результате, когда объект должен снова сериализоваться, он не знает, какие свойства в каком файле находятся.
Вопрос: Каков наилучший способ хранения «источника» в зависимости от свойства, чтобы я мог гарантировать, что параметр записывается в тот же файл конфигурации, из которого он был прочитан
Спасибо.