วิธีการกำหนด Custom Web.config Sections ใน ASP.NET

เมื่อพัฒนาแอปพลิเคชันเว็บ คุณมักจะพบกับสถานการณ์ที่คุณต้องจัดการการตั้งค่าคอนฟิกูเรชันที่อาจแตกต่างกันในแต่ละสภาพแวดล้อม ซึ่งการจัดการนี้จะซับซ้อนมากขึ้นเมื่อแอปพลิเคชันของคุณต้องการการตั้งค่าที่ขึ้นต่อกันที่ต้องเปลี่ยนพร้อมกัน วิธีการที่ดีในการแก้ปัญหานี้คือการกำหนด custom web.config sections คู่มือนี้จะอธิบายวิธีการสร้าง sections ที่กำหนดเองเหล่านี้พร้อมกับแอตทริบิวต์และองค์ประกอบย่อยเพื่อการจัดการการตั้งค่าที่มีประสิทธิภาพ

การทำความเข้าใจ Custom Web.config Sections

โดยค่าเริ่มต้น แอปพลิเคชันเว็บจะใช้คีย์-ค่าแบบง่าย ๆ สำหรับการตั้งค่าคอนฟิกูเรชัน อย่างไรก็ตาม เมื่อแอปพลิเคชันของคุณเติบโต การรักษาความชัดเจนจะเป็นสิ่งสำคัญเมื่อค่าที่เกี่ยวข้องกันหรือเมื่อการตั้งค่าต้องเปลี่ยนต่อสภาพแวดล้อมต่าง ๆ Custom sections ช่วยให้คุณสามารถจัดกลุ่มการตั้งค่าที่เกี่ยวข้องกันได้ ทำให้การจัดการและความเข้าใจนั้นง่ายขึ้น

คู่มือขั้นตอนการสร้าง Custom Config Sections

1. กำหนดซีกคอนฟิกูเรชัน

ในการสร้างซีกคอนฟิกูเรชันที่กำหนดเอง คุณจะต้องกำหนดคลาสใหม่ในแอปพลิเคชัน ASP.NET ของคุณโดยใช้คลาสพื้นฐาน ConfigurationSection ด้านล่างนี้เป็นตัวอย่างของซีกคอนฟิกูเรชันที่กำหนดขึ้นซึ่งกำหนดพื้นที่ดิสก์ของผู้ใช้ที่อนุญาตในแอปพลิเคชันของคุณ

ตัวอย่าง: MailCenterConfiguration.cs

namespace Ani {
    public sealed class MailCenterConfiguration : ConfigurationSection {
        [ConfigurationProperty("userDiskSpace", IsRequired = true)]
        [IntegerValidator(MinValue = 0, MaxValue = 1000000)]
        public int UserDiskSpace {
            get { return (int)base["userDiskSpace"]; }
            set { base["userDiskSpace"] = value; }
        }
    }
}

อัปเดต Web.config

คุณยังต้องลงทะเบียนซีกคอนฟิกูเรชันที่กำหนดเองของคุณใน web.config ตามที่แสดงด้านล่าง:

<configSections>
    <!-- ไฟล์คอนฟิกูเรชัน Mailcenter -->
    <section name="mailCenter" type="Ani.MailCenterConfiguration" requirePermission="false"/>
</configSections>
...
<mailCenter userDiskSpace="25000">
    <mail host="my.hostname.com" port="366" />
</mailCenter>

2. ดำเนินการกับองค์ประกอบย่อย

บ่อยครั้งที่จำเป็นต้องกำหนดองค์ประกอบย่อยภายในซีกคอนฟิกูเรชันที่กำหนดเองของคุณ สำหรับตัวอย่างแล้ว องค์ประกอบ mail สามารถกำหนดแยกออกมาได้ ซึ่งรวมถึงคุณสมบัติพิเศษต่าง ๆ ที่เกี่ยวข้องกับการตั้งค่าจดหมาย

ปรับปรุง MailCenterConfiguration.cs

เพิ่มคลาสน้องสาว MailElement เพื่อจัดการการตั้งค่าที่เฉพาะเจาะจงกับจดหมาย:

public sealed class MailCenterConfiguration : ConfigurationSection {
    [ConfigurationProperty("mail", IsRequired = true)]
    public MailElement Mail {
        get { return (MailElement)base["mail"]; }
        set { base["mail"] = value; }
    }

    public class MailElement : ConfigurationElement {
        [ConfigurationProperty("host", IsRequired = true)]
        public string Host {
            get { return (string)base["host"]; }
            set { base["host"] = value; }
        }

        [ConfigurationProperty("port", IsRequired = true)]
        [IntegerValidator(MinValue = 0, MaxValue = 65535)]
        public int Port {
            get { return (int)base["port"]; }
            set { base["port"] = value; }
        }
    }
}

3. การเข้าถึงค่าของการตั้งค่า

เมื่อซีกคอนฟิกูเรชันของคุณถูกตั้งค่าแล้ว การดึงค่ามาใช้ในแอปพลิเคชันของคุณก็เป็นเรื่องง่าย คุณสามารถสร้างอินสแตนซ์ของอ็อบเจ็กต์คอนฟิกูเรชันซึ่งจะอ่านค่าจาก web.config โดยอัตโนมัติ

ตัวอย่างโค้ดการดึง

นี่คือวิธีการเข้าถึงคุณสมบัติของ MailCenterConfiguration:

private static MailCenterConfiguration instance = null;
public static MailCenterConfiguration Instance {
    get {
        if (instance == null) {
            instance = (MailCenterConfiguration)WebConfigurationManager.GetSection("mailCenter");
        }
        return instance;
    }
}

4. การตรวจสอบความถูกต้อง

เพื่อให้แน่ใจว่าแอปพลิเคชันของคุณเริ่มต้นโดยไม่มีปัญหาอันเกิดจากข้อมูลคอนฟิกูเรชันที่ไม่ถูกต้อง คุณควรโหลดคอนฟิกูเรชันของคุณในระยะเริ่มต้นของแอปพลิเคชัน ด้วยวิธีนี้ ทันทีที่เกิดข้อผิดพลาดในการตรวจสอบความถูกต้องของการคอนฟิกูเรชัน คุณจะเห็นข้อยกเว้นแทนที่จะเกิดข้อผิดพลาดในช่วงการทำงานภายหลัง

ตัวอย่าง Global.asax

protected void Application_Start(object sender, EventArgs e) {
    MailCenterConfiguration.Instance;
}

สรุป

การกำหนดซีก web.config ที่กำหนดเองในแอปพลิเคชัน ASP.NET ของคุณสามารถปรับปรุงการจัดการการคอนฟิกูเรชันของคุณได้อย่างมากโดยการอนุญาตให้คุณจัดกลุ่มการตั้งค้าที่เกี่ยวข้องกัน เพิ่มข้อจำกัด และทำให้ความชัดเจนระหว่างสภาพแวดล้อมต่าง ๆ คุณสามารถสร้างวิธีการที่มีโครงสร้างและแข็งแกร่งในการคอนฟิกูเรชันซึ่งสามารถขยายตัวได้ตามความซับซ้อน

ไม่ว่าจะเป็นการจัดการพื้นที่ดิสก์หรือการตั้งค่าที่ขึ้นต่อกันอื่น ๆ การใช้ซีกคอนฟิกูเรชันที่กำหนดเองจะตอบสนองความต้องการของแอปพลิเคชันของคุณได้ดียิ่งขึ้น