Maison développement back-end Tutoriel C#.Net Fichier de configuration .Net - exemple de type de stockage de fichier de configuration de réflexion

Fichier de configuration .Net - exemple de type de stockage de fichier de configuration de réflexion

Feb 24, 2017 am 10:26 AM

La réflexion du fichier de configuration supprime la sélection fastidieuse de l'instruction, apportant un beau rush !

D'abord amélioré la classe (connectée ci-dessus) :

Définissez ensuite les spécificités que nous souhaitons utiliser dans le fichier de configuration que nous souhaitons utiliser les classes et des gestionnaires de balises personnalisés :
namespace ClassLib
{
    /// <summary>
    /// Interface IGreetingStrategy
    /// </summary>
    /// <remarks>Editor:v-liuhch CreateTime:2015/6/28 11:01:58</remarks>
    public interface IGreetingStrategy
    {
        string GreetingType { get; }
        void SetGreetingWords(ITextControl textContrl);
    }

    /// <summary>
    /// Class EnglishGreeting
    /// </summary>
    /// <remarks>Editor:v-liuhch CreateTime:2015/6/28 11:02:38</remarks>
    public class EnglishGreeting : IGreetingStrategy
    {
        public string GreetingType
        {
            get { return "English"; }
        }

        public void SetGreetingWords(ITextControl textContrl)
        {
            textContrl.Text = "hello,readers";
        }
    }

    /// <summary>
    /// Class ChineseGreeting
    /// </summary>
    /// <remarks>Editor:v-liuhch CreateTime:2015/6/28 11:02:56</remarks>
    public class ChineseGreeting : IGreetingStrategy
    {
        private string greetingType;
        public ChineseGreeting(string greetingType)
        {

            this.greetingType = greetingType;
        }
        public ChineseGreeting() : this("中文") { }
        public ChineseGreeting(XmlNode section) {
            XmlAttribute attr = section.SelectSingleNode("params").Attributes["greetingType"];//获取属性值
            greetingType = attr.Value;//为字段赋值
        }
        public string GreetingType
        {
            get { return greetingType; }
        }

        public void SetGreetingWords(ITextControl textContrl)
        {
            textContrl.Text = "你好啊,小读者!";
        }
    }

    /// <summary>
    /// Class GeneralClass:这个类可能还有很多的字段,属性,方法,这里只是简写下
    /// PS:GeneralClass是一个普通的类型,这个类内部维护着IGreetingStrategy,调用的时候还是根据多态具体调用。
    /// </summary>
    /// <remarks>Editor:v-liuhch CreateTime:2015/6/28 11:08:04</remarks>
    public class GeneralClass
    {
        private IGreetingStrategy gs;
        public GeneralClass(IGreetingStrategy gs)
        {
            this.gs = gs;
        }
        public string GeneralProperty
        {
            get
            {
                //做一些额外的工作,这里省略
                return "<span sytle=&#39;color:red&#39;>" + gs.GreetingType + "</span>";
            }
        }
        public void GeneralMethod(ITextControl textContrl)
        {
            //做一些额外的工作,这里省略
            gs.SetGreetingWords(textContrl);
            textContrl.Text = "<span sytle=&#39;color:red&#39;>" + textContrl.Text + "</span>";
            //省略。。。。。。。
        }


    }

}
Copier après la connexion

Ici, ChineseGreeting est la classe que nous voulons utiliser, et la classe définie ci-dessus est la classe qui gère GreetingStrategy
  <!--greetingStrategy节点及其处理程序配置-->
  <configSections>
    <section name="greetingStrategy" type="ClassLib.GreetingConfigurationHandler,ClassLib"/>
  </configSections>
  <greetingStrategy type="ClassLib.ChineseGreeting,ClassLib">
    <params greetingType="***中文问候***"/>  <!--构造函数的参数-->
  </greetingStrategy>
Copier après la connexion


Ensuite, écrivez l'implémentation spécifique de cette classe :

Dans la méthode de création, nous déterminons d'abord si la classe ChineseGreeting a une méthode de construction avec un paramètre comme nœud. Si c'est le cas, utilisons directement section comme paramètre et transmettez-la lors de l'utilisation de la réflexion pour créer une instance de type
namespace ClassLib
{
    public class GreetingConfigurationHandler : IConfigurationSectionHandler
    {
        /*
         处理有参数的构造函数的对象的创建:
         */
        /// <summary>
        /// 创建配置节处理程序。
        /// </summary>
        /// <param name="parent">父对象。</param>
        /// <param name="configContext">配置上下文对象。</param>
        /// <param name="section">节 XML 节点。</param>
        /// <returns>创建的节处理程序对象。</returns>
        /// <exception cref="System.NotImplementedException"></exception>
        /// <remarks>Editor:v-liuhch CreateTime:2015/6/30 20:34:54</remarks>
        public object Create(object parent, object configContext, System.Xml.XmlNode section)
        {
            //获取节点type属性的值
            Type t = Type.GetType(section.Attributes["type"].Value);
            object obj=null;

            try
            {
                /* 2,在要实例的类中加入一个构造函数,接收一个XmlNode节点,将greeting_stragetgy的节点在此传递,然后在这个构造函数中进行处理;*/
                //如果t包含有参数为xmlnode的构造函数,直接使用这个构造函数
                Type[] paras = { typeof(XmlNode) };
                ConstructorInfo constructors = t.GetConstructor(paras);
                if (constructors != null)
                {
                    object[] paramters = { section };
                    return Activator.CreateInstance(t, paramters); //传入读取到的构造函数的参数
                }

                if (section.SelectSingleNode("params") == null)  //无参数构造函数
                {
                    obj = Activator.CreateInstance(t);
                }
                else  //有参数构造函数
                {
                    /*1,在此类中对策略类进行处理,取得params节点的属性值,然后传递给具体实例化的类;*/

                    //获取params节点的属性greetingType的值
                    XmlAttribute attr = section.SelectSingleNode("params").Attributes["greetingType"];
                    object[] parameters = { attr.Value };
                    obj = Activator.CreateInstance(t, parameters); //传入读取到的构造函数的参数
                } 
            }
            catch (Exception)
            {

                return null;
            }
            
            return obj ;
        }
    }
}
Copier après la connexion

< ; 🎜> S'il n'existe pas une telle méthode de construction, nous lirons les paramètres dans le fichier XML dans cette classe de traitement, puis les transmettrons lorsque le type sera instancié

 En comparant les deux ; méthodes, en fait c'est pareil, c'est juste une question de rapidité de lecture de ce paramètre ; après comparaison personnelle, j'estime que la façon de lire les paramètres du constructeur dans le fichier de configuration de cette classe est plus flexible, ce qui est mon personnel préférence.

Écrivez quelque chose à tester :

Héhé, c'est relativement pratique.

 #region 自定义节点存储类型信息——反射方法
            IGreetingStrategy greetingStrategy = (IGreetingStrategy)ConfigurationManager.GetSection("greetingStrategy");
            if (greetingStrategy != null)
            {
                GeneralClass generalClass = new GeneralClass(greetingStrategy);
                ltrGreetingType.Text = generalClass.GeneralProperty;
                generalClass.GeneralMethod(ltrGreetingWord);
            }
            #endregion
Copier après la connexion

                                                                                         Le coût est faible, le fichier de configuration doit donc être téléchargé à ce moment. . . . . .

Ce qui précède est le contenu du fichier de configuration .Net - instance de type de stockage du fichier de configuration de réflexion. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Implémentation du mécanisme de réflexion des interfaces et des classes abstraites en Java Implémentation du mécanisme de réflexion des interfaces et des classes abstraites en Java May 02, 2024 pm 05:18 PM

Le mécanisme de réflexion permet aux programmes d'obtenir et de modifier des informations de classe au moment de l'exécution. Il peut être utilisé pour implémenter la réflexion d'interfaces et de classes abstraites : Réflexion d'interface : obtenez l'objet de réflexion d'interface via Class.forName() et accédez à ses métadonnées (nom, méthode et champ) . Réflexion de classes abstraites : Semblable aux interfaces, vous pouvez obtenir l'objet de réflexion d'une classe abstraite et accéder à ses métadonnées et méthodes non abstraites. Cas pratique : Le mécanisme de réflexion peut être utilisé pour implémenter des proxys dynamiques, en interceptant les appels aux méthodes d'interface au moment de l'exécution en créant dynamiquement des classes proxy.

Comment utiliser la réflexion pour accéder aux champs et méthodes privés dans Golang Comment utiliser la réflexion pour accéder aux champs et méthodes privés dans Golang May 03, 2024 pm 12:15 PM

Vous pouvez utiliser la réflexion pour accéder aux champs et méthodes privés en langage Go : Pour accéder aux champs privés : obtenez la valeur de réflexion de la valeur via Reflect.ValueOf(), puis utilisez FieldByName() pour obtenir la valeur de réflexion du champ, et appelez le Méthode String() pour imprimer la valeur du champ. Appelez une méthode privée : obtenez également la valeur de réflexion de la valeur via Reflect.ValueOf(), puis utilisez MethodByName() pour obtenir la valeur de réflexion de la méthode, et enfin appelez la méthode Call() pour exécuter la méthode. Cas pratique : modifiez les valeurs des champs privés et appelez des méthodes privées par réflexion pour obtenir le contrôle des objets et la couverture des tests unitaires.

Où est le profil utilisateur Win10 ? Comment configurer le profil utilisateur dans Win10 ? Où est le profil utilisateur Win10 ? Comment configurer le profil utilisateur dans Win10 ? Jun 25, 2024 pm 05:55 PM

Récemment, de nombreux utilisateurs du système Win10 souhaitent modifier le profil utilisateur, mais ils ne savent pas comment le faire. Cet article vous montrera comment définir le profil utilisateur dans le système Win10 ! Comment configurer un profil utilisateur dans Win10 1. Tout d'abord, appuyez sur les touches « Win+I » pour ouvrir l'interface des paramètres, puis cliquez pour accéder aux paramètres « Système ». 2. Ensuite, dans l'interface ouverte, cliquez sur « À propos » sur la gauche, puis recherchez et cliquez sur « Paramètres système avancés ». 3. Ensuite, dans la fenêtre contextuelle, passez à la barre d'options "" et cliquez sur "Configuration utilisateur" ci-dessous.

Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM May 06, 2024 pm 04:43 PM

Le développement des technologies d’intelligence artificielle (IA) bat son plein aujourd’hui et elles ont montré un grand potentiel et une grande influence dans divers domaines. Aujourd'hui, Dayao partagera avec vous 4 cadres de projets liés au modèle d'IA open source .NET LLM, dans l'espoir de vous fournir une référence. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel est un kit de développement logiciel (SDK) open source conçu pour intégrer de grands modèles de langage (LLM) tels qu'OpenAI, Azure

Comment utiliser la réflexion pour modifier dynamiquement les valeurs des variables dans Golang Comment utiliser la réflexion pour modifier dynamiquement les valeurs des variables dans Golang May 02, 2024 am 11:09 AM

La réflexion du langage Go vous permet de manipuler des valeurs de variables au moment de l'exécution, notamment en modifiant les valeurs booléennes, les entiers, les nombres à virgule flottante et les chaînes. En obtenant la valeur d'une variable, vous pouvez appeler les méthodes SetBool, SetInt, SetFloat et SetString pour la modifier. Par exemple, vous pouvez analyser une chaîne JSON dans une structure, puis utiliser la réflexion pour modifier les valeurs des champs de la structure. Il convient de noter que l'opération de réflexion est lente et que les champs non modifiables ne peuvent pas être modifiés. Lors de la modification de la valeur du champ de structure, les champs associés peuvent ne pas être automatiquement mis à jour.

Installer Helm sur Ubuntu Installer Helm sur Ubuntu Mar 20, 2024 pm 06:41 PM

Helm est un composant important de Kubernetes qui simplifie le déploiement des applications Kubernetes en regroupant les fichiers de configuration dans un package appelé HelmChart. Cette approche rend la mise à jour d'un seul fichier de configuration plus pratique que la modification de plusieurs fichiers. Avec Helm, les utilisateurs peuvent facilement déployer des applications Kubernetes, simplifiant ainsi l'ensemble du processus de déploiement et améliorant l'efficacité. Dans ce guide, j'aborderai différentes manières d'implémenter Helm sur Ubuntu. Remarque : les commandes du guide suivant s'appliquent à Ubuntu 22.04 ainsi qu'à toutes les versions d'Ubuntu et aux distributions basées sur Debian. Ces commandes sont testées et devraient fonctionner correctement sur votre système. en U

Introduction à la réflexion Golang et à l'analyse de scénarios d'application Introduction à la réflexion Golang et à l'analyse de scénarios d'application Apr 03, 2024 pm 01:45 PM

La fonctionnalité de réflexion du langage Go permet à un programme d'inspecter et de modifier la structure d'un type au moment de l'exécution. En utilisant Type, Value et Reflect.Kind, nous pouvons obtenir les informations de type, les valeurs de champ et les méthodes de l'objet, et nous pouvons également créer et modifier des objets. Les méthodes d'opération spécifiques incluent : la vérification du type (TypeOf()), l'obtention de la valeur du champ (ValueOf(), FieldByName()), la modification de la valeur du champ (Set()) et la création d'un objet (New()).

Considérations de sécurité et meilleures solutions pour la réflexion Golang Considérations de sécurité et meilleures solutions pour la réflexion Golang May 04, 2024 pm 04:48 PM

Reflection fournit des fonctionnalités de vérification et de modification de type dans Go, mais il présente des risques de sécurité, notamment l'exécution de code arbitraire, la falsification de type et la fuite de données. Les meilleures pratiques incluent la limitation des autorisations et des opérations réfléchissantes, l'utilisation de listes blanches ou de listes noires, la validation des entrées et l'utilisation d'outils de sécurité. En pratique, la réflexion peut être utilisée en toute sécurité pour inspecter les informations de type.

See all articles