В этом разделе описан простой пример, демонстрирующий как определить и использовать в приложении одну Настройку типа string. На первом этапе реализована необходимая инфраструктура, а затем продемонстрировано, как обратиться к значению Настройки в обработчике события simpleAction1.Execute. Получить итоговое решение можно по ссылке QuickBCSettings.
Дя решения задачи необходимо последовательно выполнить следующие шаги:
- Создать XAF-приложение с помощью Мастера.
- Добавить модули XafariBCSettingsModule и XafariEditorsModule в Module Project.
- Добавить модули XafariBCSettingsWebModule и XafariEditorsWebModule в Web Application Project.
- Добавить модули XafariBCSettingsWinModule и XafariEditorsWinModule в Windows Forms Application Project.
- Значения Настроек хранятся в специальных Слоях. В данном примере достаточно реализовать Слой по умолчанию. Необходимо добавить в платформенно-независимый модуль класс DefaultSlice используя следующий код:
class DefaultSlice : SettingsDefaultValueSlice<SettingsValueSlice>
{
public DefaultSlice(SettingsAccessor.ServiceSpaceContext serviceContext)
: base(serviceContext)
{
}
public override string Name
{
get
{
return "SliceForSettings";
}
}
public override IEnumerable<SettingsValueSlice> GetChildrenFromNextSlice()
{
return new List<SettingsValueSlice>();
}
}
- Доступ к значениям Настроек предоставляет специальный класс, производный от Xafari.BC.Settings.SettingsAccessor. Необходимо добавить в платформенно-независимый модуль класс SolutionSettingsAccessor и перекрыть метод Setup, как это сделано в нижеприведенном фрагменте кода:
public class SolutionSettingsAccessor : SettingsAccessor
{
public override void Setup(XafApplication application)
{
base.Setup(application);
this.CreateRootSlice<DefaultSlice>();
}
}
- Создать и проинициализировать экземпляр SolutionSettingsAccessor в методе Setup платформенно-независимого модуля:
public override void Setup(XafApplication application) {
base.Setup(application);
SettingsAccessor.Instance = new SolutionSettingsAccessor();
SettingsAccessor.Instance.Setup(application);
}
- Определить Настройку MessageText. Для этого следует продекларировать интерфейс ISettingsValues, содержащий свойство MessageText типа Xafari.BC.Settings.IModelKeyString.
public interface ISettingsValues
{
IModelKeyString MessageText { get; }
}
- Далее необходимо расширить Application Model полученным интерфейсом, для этого следует перекрыть метод ExtendModelInterfaces платформенно-независимого модуля:
public override void ExtendModelInterfaces(ModelInterfaceExtenders extenders) {
base.ExtendModelInterfaces(extenders);
extenders.Add<IModelBCSettings, ISettingsValues>();
}
- Настроить Navigation Items, чтобы представить Detail View Настроек в системе навигации приложения. Для этого надо вызвать Model Editor, перейти в узел NavigationItems и добавить пункт SettingsObject_DetailView_User, как показано на изображении ниже.
- Первый этап закончен. Можно собрать и запустить приложение, перейти к Settings Detail View и внести значение.
Win
Web
- Убедившись в работоспособности приложения, остановите отладку. Далее необходимо добавить MessageTextWindowController в платформенно независимый модуль и реализовать в нем следующую логику:
public partial class MessageTextWindowController : WindowController
{
public MessageTextWindowController()
{
InitializeComponent();
// Target required Windows (via the TargetXXX properties) and create their Actions.
}
protected override void OnActivated()
{
base.OnActivated();
// Perform various tasks depending on the target Window.
}
protected override void OnDeactivated()
{
// Unsubscribe from previously subscribed events and release other references and resources.
base.OnDeactivated();
}
private void simpleAction1_Execute(object sender, SimpleActionExecuteEventArgs e)
{
var str = ((ISettingsValues)SettingsAccessor.Instance.ObjectSpace.AppSettings().Root()).MessageText.Value;
MessageObject.CreateMessage(e.ShowViewParameters, Application, MessageType.Info, "MessageText", str);
}
}
- Теперь следует запустить приложение и удостовериться в корректной работе контроллера. После выполнения Message Text Action, приложение отобразит Message Box c текущим значением Настройки:
Детальная информация о сервисе Настроек приложения изложена в разделе Подробности.