Application Manager
Tweet
sobota, 23 październik 2010
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:
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:
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.
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 = "
"; 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) ); }
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.


Twitter