Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menyesuaikan Tetapan App.config Secara Dinamik semasa Runtime dalam Seni Bina Modular?

Bagaimanakah Saya Boleh Menyesuaikan Tetapan App.config Secara Dinamik semasa Runtime dalam Seni Bina Modular?

Barbara Streisand
Barbara Streisandasal
2025-01-25 17:41:10333semak imbas

How Can I Dynamically Customize App.config Settings at Runtime in a Modular Architecture?

Tetapan app.config disesuaikan dinamik

<:> Soalan:

Dalam seni bina modular, adalah menyusahkan untuk mengkonfigurasi item konfigurasi yang mengandungi modul dinamik dalam app.config utama. Matlamatnya adalah untuk membuat app.config dalam ingatan berasingan, yang bergabung dari bahagian konfigurasi aplikasi dan modul utama.

Penyelesaian:

Untuk mencapai matlamat ini, kita boleh menggunakan kelas tersuai , yang sementara mengubah laluan app.config dan menetapkan semula mekanisme konfigurasi. Berikut adalah prinsip kerja:

Penggunaan: AppConfig

<code class="language-csharp">public abstract class AppConfig : IDisposable
{
    public static AppConfig Change(string path)
    {
        return new ChangeAppConfig(path);
    }

    public abstract void Dispose();

    private class ChangeAppConfig : AppConfig
    {
        private readonly string oldConfig;

        public ChangeAppConfig(string path)
        {
            oldConfig = AppDomain.CurrentDomain.GetData("APP_CONFIG_FILE").ToString();
            AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);
            ResetConfigMechanism();
        }

        public override void Dispose()
        {
            AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", oldConfig);
            ResetConfigMechanism();
        }

        private static void ResetConfigMechanism()
        {
            typeof(ConfigurationManager)
                .GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static)
                .SetValue(null, 0);

            typeof(ConfigurationManager)
                .GetField("s_configSystem", BindingFlags.NonPublic | BindingFlags.Static)
                .SetValue(null, null);

            typeof(ConfigurationManager)
                .Assembly.GetTypes()
                .Where(x => x.FullName == "System.Configuration.ClientConfigPaths")
                .First()
                .GetField("s_current", BindingFlags.NonPublic | BindingFlags.Static)
                .SetValue(null, null);
        }
    }
}</code>

<:> nota: Untuk menukar keseluruhan app.config semasa keseluruhan runtime, cuma hubungi

pada permulaan permohonan, dan tidak diperlukan
<code class="language-csharp">// 使用默认的 app.config
using (AppConfig.Change(tempFileName))
{
    // 使用指定路径下的 app.config
}
// 再次使用默认的 app.config</code>
blok.

Output Revied ini mengekalkan imej asal dan formatnya semasa mengolah semula teks untuk kejelasan dan aliran yang lebih baik

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyesuaikan Tetapan App.config Secara Dinamik semasa Runtime dalam Seni Bina Modular?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn