zoukankan      html  css  js  c++  java
  • .net分布在指定文件夹的web.confgi或者app.config

    .Net里面,ConfigurationManager默认读取的是Web.config或者App.config但是,什么都放在这两个文件里面,感觉太多了,也不好管理配置。于是参考了下别人的资料,自己写了一个例子,例子实现的的是E:App.config的文件,文件格式如下
    
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="books" type="ConfigurationDemo.BooksSection, ConfigurationDemo"/>
      </configSections>
      <books>
        <book name="123" author="456"/>
      </books>  
    </configuration>
    
    要实现这样的功能,就要实现自己的ConfigurationSection,ConfigurationElementCollection,ConfigurationElement 
    
    
    1.ConfigurationSection
    
    public class BooksSection : ConfigurationSection
        {
            [ConfigurationProperty("books", IsRequired = true)]
            public string Category
            {
    
                get
                {
                    return (string)base["Category"];
                }
    
                set
                {
                    base["Category"] = value;
                }
    
            }
            [ConfigurationProperty("", IsDefaultCollection = true)]
            public BookElementCollection Books
            {
    
                get
                {
                    return (BookElementCollection)base[""];
                }
    
            }
    
        }
    
    2.ConfigurationElementCollection
    
        public class BookElementCollection : ConfigurationElementCollection
        {
            protected override ConfigurationElement CreateNewElement()
            {
                return new BookElement();
            }
    
            protected override object GetElementKey(ConfigurationElement element)
            {
                return ((BookElement)element).Name;
            }
    
            public override ConfigurationElementCollectionType CollectionType
            {
                get
                {
                    return ConfigurationElementCollectionType.BasicMap;
                }
            }
    
            protected override string ElementName
            {
                get
                {
                    return "book";
                }
            }
            public BookElement this[int index]
            {
    
                get
                {
                    return (BookElement)BaseGet(index);
                }
                set
                {
                    if (BaseGet(index) != null)
                    {
                        BaseRemoveAt(index);
                    }
                    BaseAdd(index, value);
                }
    
            }
        }
    
    
    3.ConfigurationElement
    
        public class BookElement : ConfigurationElement
        {
    
            [ConfigurationProperty("name", IsRequired = true)]
            public string Name
            {
                get
                {
                    return (string)base["name"];
                }
    
                set
                {
                    base["name"] = value;
                }
    
            }
    
            [ConfigurationProperty("author", IsRequired = true)]
    
            public double Author
            {
                get
                {
                    return (double)base["author"];
                }
    
                set
                {
                    base["author"] = value;
                }
            }
    
        }
    
    
    
    4.0Config文件
    
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="books" type="ConfigurationDemo.BooksSection, ConfigurationDemo"/>
      </configSections>
      <books>
        <book name="123" author="456"/>
      </books>  
    </configuration>
    
    5.0读取
    
    
            static void Main(string[] args)
            {
                string configPath = @"E:App.config";
                ExeConfigurationFileMap map = new ExeConfigurationFileMap();
                map.ExeConfigFilename = configPath;
    
                var configManager = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
                if (configManager.HasFile)
                {
                    BooksSection config = (BooksSection)configManager.GetSection("books");
                    Console.WriteLine(config.Books[0].Name);
                }
    
            }
    结果
    
    123
    请按任意键继续. . .
  • 相关阅读:
    Kubernetes日志的6个最佳实践
    如何选出适合自己的管理Helm Chart的最佳方式?
    授权权限服务设计解析
    微服务中如何设计一个权限授权服务
    微服务中的网关
    ketchup服务治理
    ketchup 消息队列rabbitmq使用
    ketchup 注册中心consul使用
    微服务框架 ketchup 介绍
    微服务框架surging学习之路——序列化
  • 原文地址:https://www.cnblogs.com/kexb/p/6880067.html
Copyright © 2011-2022 走看看