Добавление собственного раздела настроек для модуля

В статье приведен пример добавления собственного раздела настроек для модуля, в котором задаются настройки подключения к СУБД MSSQL Server, а именно: Имя пользователя, Пароль, DataSource, InitialCatalog. Для реализации собственного раздела настроек необходимо наследоваться от классов:

  1. EleWise.ELMA.Runtime.Settings.GlobalSettingsBase - Базовый класс для глобальных настроек, хранит настройки в полях объекта
  2. EleWise.ELMA.Runtime.Settings.GlobalSettingsModuleBase<TSettings> - В данном классе определяется название модуля, его раздел в системе, а также методы для загрузки/сохранения настроек.
  3. EleWise.ELMA.Web.Mvc.Models.Settings.GlobalSettingsModuleControllerBase<TSettings, TSettingsModule> - Данный класс необходим для определения положения настроек модуля, а также для отрисовки форм просмотра/редактирования.

Пример отображения данных

Рис. 1. Раздел настроек для модуля

Для реализации простого блока настроек необходимо реализовать 3 класса, наследованные от GlobalSettingsBase, GlobalSettingsModuleBase и GlobalSettingsModuleControllerBase. Примеры классов приведены ниже. Для просмотра более подробного примера можно воспользоваться данной статьей.

Пример класса, наследованного от класса GlobalSettingsBase

public class Settings : GlobalSettingsBase
{
    /// <summary>
    /// Определяет, что пароль не изменен
    /// </summary>
    public const string PASSWORD_NOT_CHANGED = "($PASSWORD_NOT_CHANGED$)";

    public Settings()
    {
        DataSource = "(local)";
        InitialCatalog = "BASEMESSAGES";
    }


    [DisplayName(typeof(@__Resources_MSSQLConnectionSettings), "DataSource")]
    [Description(typeof(@__Resources_MSSQLConnectionSettings), "DataSourceDescription")]
    [Required(true)] //Обязательность заполнения поля
    public string DataSource { get; set; }

    [DisplayName(typeof(@__Resources_MSSQLConnectionSettings), "InitialCatalog")]
    [Description(typeof(@__Resources_MSSQLConnectionSettings), "InitialCatalogDescription")]
    [Required(true)] //Обязательность заполнения поля
    public string InitialCatalog { get; set; }

    [DisplayName(typeof(@__Resources_MSSQLConnectionSettings), "UserId")]
    [Description(typeof(@__Resources_MSSQLConnectionSettings), "UserIdDescription")]
    [Required(true)] //Обязательность заполнения поля
    public string UserId { get; set; }
}

/// <summary>
/// Ресурсы
/// </summary>
internal class @__Resources_MSSQLConnectionSettings
{
    public static string DataSource { get { return SR.T("DataSource"); } }

    public static string DataSourceDescription { get { return SR.T("Коннект до базы"); } }

    public static string InitialCatalog { get { return SR.T("InitialCatalog"); } }

    public static string InitialCatalogDescription { get { return SR.T("Имя базы данных"); } }

    public static string UserId { get { return SR.T("Имя пользователя"); } }

    public static string UserIdDescription { get { return SR.T("Имя пользователя для подключения к БД"); } }
}

Пример класса, наследованного от класса GlobalSettingsModuleBase

[Component]
public class SettingsModule : GlobalSettingsModuleBase<Settings>
{
    public static Guid UID = new Guid("{658A7D31-873B-4aa1-B183-54EE55DE0EAD}");

    public override Guid ModuleGuid
    {
        get { return UID; }
    }

    /// <summary>
    /// Название модуля
    /// </summary>
    public override string ModuleName
    {
        get { return SR.T("Настройки подключения к базе MSSQL для отправки сообщений"); }
    }
}

Пример класса, наследованного от класса GlobalSettingsModuleControllerBase

[Component(Order = 260)]
public class SettingsModuleController : GlobalSettingsModuleControllerBase<Settings, SettingsModule>
{
    public SettingsModuleController(SettingsModule module)
            : base(module)
    {
    }
}<br>

Для применения настроек в Вашем модуле, необходимо загрузить настройки: var settings = Locator.GetService<SettingsModule>();

Дальше Вы можете использовать значения настроек в Вашей реализации.

Для реализации более сложного отображения настроек можно воспользоваться следующей статьей, в которой описано как реализовать собственные настройки с пользовательским отображением формы просмотра, редактирования настроек.

Ссылки на элементы API

GlobalSettingsBase

GlobalSettingsModuleControllerBase

GlobalSettingsModuleBase

Прикрепленные файлы