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

Leave a Reply

Your email address will not be published. Required fields are marked *