zoukankan      html  css  js  c++  java
  • app.config 配置多项 配置集合 自定义配置(4) 自动增加配置项到配置文件的两种方法

    一,按照xml文件处理:

    配置文件如下图(最后的图片).

    自动写入configSections和configSections的实例

    1.自动写入configSections

     Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    
                LasteventSettingSection last = new LasteventSettingSection();
    
                config.Sections.Add("lastevent", last);
                 config.Save();

    2.自动写入实例

    我觉得不应该将.config文件当成xml来操作.但是一直没有找到方法用ConfigurationManager来实现,先用这个顶着.

     1  System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
     2             doc.Load("ConfigurationTest.exe.Config");
     3 
     4             XmlNodeList nodes = doc.ChildNodes[1].ChildNodes;
     5 
     6             foreach (XmlNode node in nodes)
     7             {
     8                 Console.WriteLine(node.InnerXml);
     9             }
    10 
    11 
    12             XmlNode newnode = doc.ChildNodes[1];
    13 
    14             foreach (XmlNode v in newnode.ChildNodes)
    15             {
    16                 if (v.Name == "lastevent")
    17                 {
    18                     Console.WriteLine("lastevent 已经存在");
    19                     return;
    20                 }
    21             }
    22 
    23             XmlElement elem = doc.CreateElement("lastevent");
    24             XmlAttribute att = doc.CreateAttribute("name");
    25             att.Value = "用于替换lastevent中不想看到的内容";
    26             elem.Attributes.Append(att);
    27 
    28 
    29             XmlElement Items = doc.CreateElement("Items");
    30             elem.AppendChild(Items);
    31 
    32 
    33             XmlElement add1 = doc.CreateElement("add");
    34 
    35             XmlAttribute original = doc.CreateAttribute("original");
    36             original.Value = "original";
    37             add1.Attributes.Append(original);
    38 
    39             XmlAttribute replacement = doc.CreateAttribute("replacement");
    40             replacement.Value = "replacement";
    41             add1.Attributes.Append(replacement);
    42 
    43             Items.AppendChild(add1);
    44 
    45             elem.AppendChild(Items);
    46 
    47 
    48             newnode.AppendChild(elem);
    49 
    50             doc.Save("111.config");

     二.用ConfigurationManager类来处理

    上面提到的不用xml处理的方法,已经找到了.

    原来配置文件为

    运行代码后变成:

    代码为:

     1  Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
     2 
     3             LasteventSettingSection section = new LasteventSettingSection();
     4             section.Name = "替换";
     5 
     6             ConfigurationTest.Items its = new ConfigurationTest.Items();
     7 
     8 
     9 
    10             Item it = new Item();
    11             it.Original = "error";
    12             it.Replacement = "information";
    13 
    14             its.Add(it);
    15 
    16              it = new Item();
    17             it.Original = "error2";
    18             it.Replacement = "information2";
    19 
    20             its.Add(it);
    21 
    22             section.Items = its;
    23 
    24             LasteventSettingSection lastevent = (LasteventSettingSection)config.Sections["lastevent"];
    25             if (lastevent == null) {
    26                 config.Sections.Add("lastevent", section);
    27             }
    28             config.Save();

     实现的类如下:

    注意:前面几个例子中,继承ConfigurationElementCollection的Items没有实现add,remove方法,必须实现才可以.

      class LasteventSettingSection : System.Configuration.ConfigurationSection
        {
            [ConfigurationProperty("name", IsRequired = false)]
            public string Name
            {
                get { return (string)base["name"]; }
                set { base["name"] = value; }
            }
    
            [ConfigurationProperty("items", IsDefaultCollection = false)]
            [ConfigurationCollection(typeof(Item), CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap, RemoveItemName = "remove")]
            public Items Items
            {
                get { return (Items)base["items"]; }
                set { base["items"] = value; }
            }
        }
    
    
    
        class Item : ConfigurationElement
        {
            [ConfigurationProperty("original", IsRequired = true, IsKey = true)]
            public string Original
            {
                get { return (string)base["original"]; }
                set { base["original"] = value; }
            }
            [ConfigurationProperty("replacement", IsRequired = true)]
            public string Replacement
            {
                get { return (string)base["replacement"]; }
                set { base["replacement"] = value; }
            }
        }
    
        class Items : ConfigurationElementCollection
        {
            protected override object GetElementKey(ConfigurationElement element)
            {
                return ((Item)element).Original;
            }
    
            protected override ConfigurationElement CreateNewElement()
            {
                return new Item();
            }
    
            public Item this[int i]
            {
                get { return (Item)base.BaseGet(i); }
            }
    
            new public Item this[string key]
            {
                get { return (Item)base.BaseGet(key); }
            }
    
            public int IndexOf(Item url)
            {
                return BaseIndexOf(url);
            }
    
            public void Add(Item url)
            {
                BaseAdd(url);
    
                // Your custom code goes here.
    
            }
    
            protected override void BaseAdd(ConfigurationElement element)
            {
                BaseAdd(element, false);
    
                // Your custom code goes here.
    
            }
    
            public void Remove(Item url)
            {
                if (BaseIndexOf(url) >= 0)
                {
                    BaseRemove(url.Original);
                    // Your custom code goes here.
                    Console.WriteLine("UrlsCollection: {0}", "Removed collection element!");
                }
            }
    
            public void RemoveAt(int index)
            {
                BaseRemoveAt(index);
    
                // Your custom code goes here.
    
            }
    
            public void Remove(string name)
            {
                BaseRemove(name);
    
                // Your custom code goes here.
    
            }
    
            public void Clear()
            {
                BaseClear();
    
                // Your custom code goes here.
                Console.WriteLine("UrlsCollection: {0}", "Removed entire collection!");
            }
    
        }
     
  • 相关阅读:
    重学JAVA基础(六):多线程的同步
    Extjs4中RadioGroup的赋值与取值
    灰色预测原理及JAVA实现
    微信公众平台开发尝试
    安装依赖的时候,报错npm WARN checkPermissions
    JavaScript 获取随机整数
    HTML+CSS+JS(+Vue)写一个通讯录组件
    常见问题 解决合集
    构造函数、原型对象prototype、实例、隐式原型__proto__的理解
    react项目中遇到的一些问题
  • 原文地址:https://www.cnblogs.com/birds-zhu/p/6918119.html
Copyright © 2011-2022 走看看