Класс Xafari.BC.Settings.SettingsAccessor обеспечивает сервис доступа к Настройкам. Необходимо реализовать наследника класса SettingsAccessor и указать в нем все Слои системы, перекрыв метод Setup:

 

    public class NorthwindSettingsAccessor : SettingsAccessor

    {

     public override void Setup(XafApplication application)

     {

                 base.Setup(application);

             this.CreateRootSlice<NorthwindSettingsDefaultValueSlice>();

             this.SliceTypes = new[]

             {

                     typeof (NorthwindSettingsDepartment),

                     typeof (NorthwindSettingsInheritedUser),

             };

     }

    }

 

Метод CreateRootSlice определяет свойство RootSlice, его параметром является тип Слоя по умолчанию, реализованный в системе.

Массив SliceTypes содержит типы всех Слоев системы, за исключением Cлоя по умолчанию.

Далее требуется создать SettingsAccessor.Instance и вызвать Setup:

 

    SettingsAccessor.Instance = new NorthwindSettingsAccessor();

    SettingsAccessor.Instance.Setup(application);

 

Чтобы обратится к Слоям и значения Настроек, необходимо использовать конструкцию SettingsAccessor.Instance.ObjectSpace.AppSettings(). Ниже приведен ряд примеров использования сервиса в прикладном коде.

Установка текущего слоя на основании SecuritySystem.CurrentUser:

    

    if (SecuritySystem.CurrentUser != null)

      SettingsAccessor.Instance.ObjectSpace.AppSettings().CurrentSlice(((InheritedUserSecuritySystem.CurrentUser).Department, SecuritySystem.CurrentUser);

 

Метод AfterConstruction() бизнес-класса Category использует значение Настройки в текущем Слое для установки значения по умолчанию:

 

        public override void AfterConstruction()

        {

            base.AfterConstruction();

            if (SettingsAccessor.Instance == nullreturn;

            var category = ((IModelNorthwindSettings)SettingsAccessor.Instance.ObjectSpace.AppSettings().Root()).Classifiers.Product.Category.Value;

            if (category != null)

            {

                var categoryThisObjSpace = this.Session.GetObjectByKey<Category>(category.Oid);

                if (categoryThisObjSpace != null)

                    this.Category = categoryThisObjSpace;

            }

            this.ShortName =

                ((IModelNorthwindSettingsSettingsAccessor.Instance.ObjectSpace.AppSettings().Root()).Classifiers.Product.ShortName.Value;

        }

 

Другие примеры обращения к сервису в коде:

 

            // get root slice

            var rootSlice = SettingsAccessor.Instance.ObjectSpace.AppSettings().RootSlice;

            // get current slice

            var currentSlice = SettingsAccessor.Instance.ObjectSpace.AppSettings().CurrentSlice;

            // get settings root node for current slice

            var rootCurrentSlice = SettingsAccessor.Instance.ObjectSpace.AppSettings().Root();

            //or

            var rootCurrentSliceS = SettingsAccessor.Instance.ObjectSpace.AppSettings().CurrentSlice.RootSettings;

            // get settings root node for root slice

            var root = SettingsAccessor.Instance.ObjectSpace.AppSettings().RootSlice.RootSettings;