ฉันใช้รูปแบบที่ฉันพบในขณะที่คุณใช้แท็ก xml พื้นฐาน แต่ห่อการตั้งค่าในระดับ config คงที่ ดังนั้น - แอป DIY การตั้งค่า
รูปแบบการกำหนดค่าคงที่ DotNetPearls
หากคุณทำเช่นนี้คุณจะสามารถ:
- ใช้ชุดค่าการตั้งค่าที่แตกต่างกันสำหรับสภาพแวดล้อมที่แตกต่างกัน (dev, test, prod)
- จัดให้มีค่าเริ่มต้นที่สมเหตุสมผลสำหรับการตั้งค่าแต่ละอย่าง
- ควบคุมวิธีการกำหนดและสร้างอินสแตนซ์
เป็นเรื่องน่าเบื่อที่จะตั้งค่า แต่ทำงานได้ดีซ่อนการอ้างอิงถึงชื่อคีย์และพิมพ์ลงไปอย่างมาก รูปแบบชนิดนี้ใช้งานได้ดีสำหรับการกำหนดค่าที่แอปพลิเคชันไม่ได้เปลี่ยนแปลง แต่คุณอาจทำงานเพื่อรองรับการเปลี่ยนแปลงได้เช่นกัน
Config:
<add key="machineName" value="Prod" />
<add key="anotherMachineName" value="Test" />
<add key="EnvTypeDefault" value="Dev" />
<add key="RootURLProd" value="http://domain.com/app/" />
<add key="RootURLTest" value="http://test.domain.com/app/" />
<add key="RootURLDev" value="http://localhost/app/" />
<add key="HumanReadableEnvTypeProd" value="" />
<add key="HumanReadableEnvTypeTest" value="Test Mode" />
<add key="HumanReadableEnvTypeDev" value="Development Mode" />
คลาสการกำหนดค่า:
using System;
using System.Collections.Generic;
using System.Web;
using WebConfig = System.Web.Configuration.WebConfigurationManager;
public static class Config
{
#region Properties
public static string EnvironmentType { get; private set; }
public static Uri RootURL { get; private set; }
public static string HumanReadableEnvType { get; private set; }
#endregion
#region CTOR
/// <summary>
/// Initializes all settings when the app spins up
/// </summary>
static Config()
{
// Init all settings here to prevent repeated NameValueCollection lookups
// Can increase performance on high volume apps
EnvironmentType =
WebConfig.AppSettings[System.Environment.MachineName] ??
"Dev";
RootURL =
new Uri(WebConfig.AppSettings["RootURL" + EnvironmentType]);
HumanReadableEnvType =
WebConfig.AppSettings["HumanReadableEnvType" + Config.EnvironmentType] ??
string.Empty;
}
#endregion
}