Application Manager

Tworząc aplikację, na pewnym etapie jej rozwoju, podejmujemy decyzję o implementacji możliwości konfiguracji tegoż systemu. Sposobów, czy też miejsc trzymania ustawień jest kilka. Artykuł opisuje w jaki sposób można zarządzać tymi zasobami.

W VisualStudio tworzymy nowy projekt typu Class Library. Upewniamy się, że nasza klasa jest publiczna (public) oraz statyczna (static). Następnie tworzymy przykładowe ustawienia, wartości:

public static string Version 
{
    get 
    {
        return System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly
        	.GetExecutingAssembly().Location).FileVersion;
    }
}

public static string MyDate { get { return DateTime.Now.ToString("dddd, dd-MM-yyyyr."); } }

public static string ProductName { get; private set; }

public static string EmailRegex { get; private set; }

public static int MinPasswordLength { get; private set; }

public static string EmailFrom { get; private set; }

Z racji tego, iż nasza klasa jest statyczna, właściwości (property) również muszą być statyczne. Pierwsze dwa pozbawione są setera (set), ponieważ od razu zwracają wartość – nie trzeba im jej nadawać. Pozostałe ustawienia zapisane są w różnych miejscach. Nadać im wartość można tylko i wyłącznie w prywatnym (private), statycznym konstruktorze (constructor), który jest bez parametrów. Przykładowy konstruktor z różnymi metodami „wyciągnięcia” danych mógłby wyglądać następująco:

static ApplicationManager()
{
    ProductName = System.Configuration.ConfigurationManager.AppSettings["ProductName"].ToString();

    Configuration config = ConfigurationManager.OpenMachineConfiguration();
    System.Net.Configuration.MailSettingsSectionGroup mailSettings = 
    	(System.Net.Configuration.MailSettingsSectionGroup)config.GetSectionGroup("system.net/mailSettings");
    EmailFrom = mailSettings.Smtp.From;

    EmailRegex = new LibraryModel.LibraryEntities().Configuration.First().EmailRegex;

    SqlConnection sqlCon = 
    	new SqlConnection(ConfigurationManager.ConnectionStrings["LibraryEntities"].ConnectionString);
    System.Data.SqlClient.SqlCommand sqlCmd = 
    	new System.Data.SqlClient.SqlCommand("SELECT * FROM Configuration WHERE Id = 1", sqlCon);
    System.Data.SqlClient.SqlDataAdapter da = 
    	new System.Data.SqlClient.SqlDataAdapter(sqlCmd.CommandText, sqlCon);
    System.Data.DataTable dtConfig = new System.Data.DataTable();
    try
    {
        sqlCon.Open();
        da.Fill(dtConfig);
    }
    catch (Exception ex)
    {
        MinPasswordLength = 5;
    }
    finally
    {
        sqlCon.Close();
    }
    if (dtConfig.Rows.Count > 0)
        MinPasswordLength = Convert.ToInt32(dtConfig.Rows[0]["MinPasswordLength"].ToString());
}

Aby wszystko działało poprawnie, należy dodać referencję do System.Configuration, co zapewni nam dostęp do ConfigurationManager.

W tym momencie możemy przetestować naszego zarządcę. Aby to uczynić tworzymy dwa projekty: Console Application oraz Web Application. Obu dajemy referencje do projektu z naszym managerem. Końcowy przykład wywołań zarządcy oraz ich rezultaty wyglądają następująco:

static void Main(string[] args)
{
    Console.WriteLine(ApplicationManager.Version);
    Console.WriteLine(ApplicationManager.MyDate);
    Console.WriteLine(ApplicationManager.ProductName);
    Console.WriteLine(ApplicationManager.EmailFrom);
    Console.WriteLine(ApplicationManager.EmailRegex);
    Console.WriteLine(ApplicationManager.MinPasswordLength);
}
const string BR = "<br />";
protected void Page_Load(object sender, EventArgs e)
{
    Response.Write(string.Format("{1}{0}{2}{0}{3}{0}{4}{0}{5}{0}{6}", BR,
        ApplicationManager.Version,
        ApplicationManager.MyDate,
        ApplicationManager.ProductName,
        ApplicationManager.EmailFrom,
        ApplicationManager.EmailRegex,
        ApplicationManager.MinPasswordLength)
        );
}

Application Manager - Console Application

Application Manager - Web Application

W rezultacie otrzymujemy wersję naszego managera, datę systemową w naszym formacie, nazwę systemu zapisaną w konfiguracji aplikacji, adres 'from' z ustawień komputera (machine.config), wyrażenie regularne do walidacji adresu email pobrane z bazy za pomocą modelu z Entity Framework, minimalną długość hasła pobraną z bazy za pomocą klasycznego ADO.NET.

Na sam koniec pragnę zwrócić uwagę, iż nazwa aplikacji zapisana w pliku konfiguracyjnym jest inna w obu przypadkach. Dzieje się tak, ponieważ obiekt ConfigurationManager pobiera plik konfiguracyjny tego z systemów, który wywołuje naszego zarządce.

Promuj

What do you think?
Like Love Haha Wow Sad Angry

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *