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

Для примера будет рассмотрена следующая структура Настроек:

 

  public interface IFeatureCenterSettings : IModelBCSettingsGroup

   {

      Group1 Group1 { get; }

      IModelKeyString KeyString { get; }

   }

 

  public interface Group1 : IModelBCSettingsGroup

   {

      IModelKeyBool KeyBool { get; }

      IPesistentObject PesistentObject { get; }

      IModelSettingEnum EnumSetting { get; }

   }

 

Пусть требуется перенести Настройку KeyBool из группы Group1 в группу FeatureCenterSettings, сохранив при этом ее прежнее значение. Для решения задачи, необходимо пошагово выполнить следующие операции:

 

  public interface Group1 : IModelBCSettingsGroup

   {

       [Obsolete()]

      IModelKeyBool KeyBool { get; }

      IPesistentObject PesistentObject { get; }

      IModelSettingEnum EnumSetting { get; }

   }

 

 

  public interface IFeatureCenterSettings : IModelBCSettingsGroup

   {

      IModelKeyBool KeyBool { get; }

      Group1 Group1 { get; }

      IModelKeyString KeyString { get; }

   }

 

 

  public class FCSettingsNodeUpdater: SettingsNodeUpdater

   {

      public override void UpdateSettingsNode(IModelBCSettings node)

       {

          var FCSettings = node as IModelKeysFC;

          if (FCSettings == null) return;

 

          var oldValue = FCSettings.FeatureCenterSettings.Group1.KeyBool;

          var newValue = FCSettings.FeatureCenterSettings.KeyBool;

          this.Update(oldValue, newValue);

       }

   }

 

 

            SettingsAccessor.Instance.Updaters.Add(new FCSettingsNodeUpdater());

            this.ObjectSpace.AppSettings().Update();

            this.ObjectSpace.AppSettings().Root().KeysFCSettings().KeyString.Value = "new value with updater";

 

Полный код, использованный в примере, можно изучить в файлах Xafari.FeatureCenter|IModelKeysFC.cs, ...|FCSettingsNodeUpdater.cs, и ...|Updater.cs демо-приложения Feature Center, установленного вместе с Xafari.