Maison > développement back-end > C++ > Comment puis-je personnaliser dynamiquement les paramètres App.config lors de l'exécution dans une architecture modulaire ?

Comment puis-je personnaliser dynamiquement les paramètres App.config lors de l'exécution dans une architecture modulaire ?

Barbara Streisand
Libérer: 2025-01-25 17:41:10
original
331 Les gens l'ont consulté

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

Personnalisez dynamiquement les paramètres App.config au moment de l'exécution

Question :

Dans une architecture modulaire, il n'est pas pratique d'inclure des éléments de configuration de module dynamique dans le app.config principal. L'objectif est de créer un seul app.config en mémoire qui fusionne les sections de configuration de l'application et des modules principaux.

Solution :

Pour y parvenir, nous pouvons utiliser une classe personnalisée AppConfig qui modifie temporairement le chemin app.config et réinitialise le mécanisme de configuration. Voici comment cela fonctionne :

<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>
Copier après la connexion

Utilisation :

<code class="language-csharp">// 使用默认的 app.config
using (AppConfig.Change(tempFileName))
{
    // 使用指定路径下的 app.config
}
// 再次使用默认的 app.config</code>
Copier après la connexion

Remarque :

Pour modifier le app.config de tout le runtime, il suffit d'appeler AppConfig.Change(tempFileName) au début de l'application, sans utiliser le bloc using.

Cette sortie révisée conserve l'image originale et son format tout en reformulant le texte pour une clarté et une fluidité améliorées. Le contenu technique reste inchangé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal