zoukankan      html  css  js  c++  java
  • ASP.NET Core 1.0 Configuration 配置管理

    documentation: https://docs.asp.net/en/latest/fundamentals/configuration.html
    github: https://github.com/aspnet/Configuration/

    项目结构

    image

    • 配置的接口定义与基础实现
      • Microsoft.Extensions.Configuration  配置文件的基础实现
      • Microsoft.Extensions.Configuration.Abstractions  配置文件的基础实现的接口定义
      • Microsoft.Extensions.Configuration.Binder  特殊配置文件实现
    • 配置的扩展
      • Microsoft.Extensions.Configuration.CommandLine  命令行扩展
      • Microsoft.Extensions.Configuration.EnvironmentVariables  环境变量扩展
      • Microsoft.Extensions.Configuration.FileExtensions  文本类型扩展
      • Microsoft.Extensions.Configuration.FileProviderExtensions 用来检测配置文本是否变动
      • Microsoft.Extensions.Configuration.Ini  Ini文件类型扩展
      • Microsoft.Extensions.Configuration.Json Json文件类型扩展
      • Microsoft.Extensions.Configuration.Xml   Xml文件类型扩展

    ASP.NET Core 1.0 中抛弃了原先的web.config文件机制,引用了现有的appsettings.json文件机制,配置的文件的类型可以是JSON,XML,INI等,如在Startup类中:

        /// <summary> 
        /// 配置信息 
         /// </summary> 
        public IConfigurationRoot Configuration { get; set; }
    
        /// <summary> 
        /// 程序入口点 
        /// </summary> 
        /// <param name="env"></param> 
        public Startup(IHostingEnvironment env) 
        { 
            var builder = new ConfigurationBuilder() 
                         .AddJsonFile("appsettings.json") 
                         .AddEnvironmentVariables(); 
            Configuration = builder.Build(); 
        }

    新的配置机制基于Microsoft.Extensions.Configuration命名空间,IConfiguration接口中定义配置信息的实例接口

        /// <summary>
        /// Represents a set of key/value application configuration properties.
        /// </summary>
        public interface IConfiguration
        {
            /// <summary>
            /// Gets or sets a configuration value.
            /// </summary>
            /// <param name="key">The configuration key.</param>
            /// <returns>The configuration value.</returns>
            string this[string key] { get; set; }
    
            /// <summary>
            /// Gets a configuration sub-section with the specified key.
            /// </summary>
            /// <param name="key">The key of the configuration section.</param>
            /// <returns>The <see cref="IConfigurationSection"/>.</returns>
            /// <remarks>
            ///     This method will never return <c>null</c>. If no matching sub-section is found with the specified key,
            ///     an empty <see cref="IConfigurationSection"/> will be returned.
            /// </remarks>
            IConfigurationSection GetSection(string key);
    
            /// <summary>
            /// Gets the immediate descendant configuration sub-sections.
            /// </summary>
            /// <returns>The configuration sub-sections.</returns>
            IEnumerable<IConfigurationSection> GetChildren();
    
            IChangeToken GetReloadToken();
        }

    IConfigurationRoot接口继承IConfiguration接口,定义了Reload方法; IConfigurationProvider 是定义所有实现的基础接口约定;IConfigurationBuilder接口是基础实现的构造器,ConfigurationBuilder类定义了基础具体实现。

    扩展方法

    支持多文件类型配置,是在IConfigurationBuilder构造器接口上进行扩展方法

           var configurationBuilder = new ConfigurationBuilder();
           configurationBuilder.AddIniFile(_iniConfigFilePath);
           configurationBuilder.AddJsonFile(_jsonConfigFilePath);
           configurationBuilder.AddXmlFile(_xmlConfigFilePath);
           configurationBuilder.AddInMemoryCollection(_memConfigContent);
           var config = configurationBuilder.Build();

    如AddJsonFile扩展方法

            /// <summary>
            /// Adds the JSON configuration provider at <paramref name="path"/> to <paramref name="configurationBuilder"/>.
            /// </summary>
            /// <param name="configurationBuilder">The <see cref="IConfigurationBuilder"/> to add to.</param>
            /// <param name="path">Absolute path or path relative to <see cref="IConfigurationBuilder.BasePath"/> of
            /// <paramref name="configurationBuilder"/>.</param>
            /// <param name="optional">Determines if loading the configuration provider is optional.</param>
            /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
            /// <exception cref="ArgumentException">If <paramref name="path"/> is null or empty.</exception>
            /// <exception cref="FileNotFoundException">If <paramref name="optional"/> is <c>false</c> and the file cannot
            /// be resolved.</exception>
            public static IConfigurationBuilder AddJsonFile(
                this IConfigurationBuilder configurationBuilder,
                string path,
                bool optional)
            {
                if (configurationBuilder == null)
                {
                    throw new ArgumentNullException(nameof(configurationBuilder));
                }
    
                if (string.IsNullOrEmpty(path))
                {
                    throw new ArgumentException(Resources.Error_InvalidFilePath, nameof(path));
                }
    
                var fullPath = Path.Combine(configurationBuilder.GetBasePath(), path);
    
                if (!optional && !File.Exists(fullPath))
                {
                    throw new FileNotFoundException(Resources.FormatError_FileNotFound(fullPath), fullPath);
                }
    
                configurationBuilder.Add(new JsonConfigurationProvider(fullPath, optional: optional));
    
                return configurationBuilder;
            }

    Application Secrets
    https://github.com/aspnet/UserSecrets
    Configuration
    https://docs.asp.net/en/latest/fundamentals/configuration.html

    http://developer.telerik.com/featured/new-configuration-model-asp-net-core/

    http://jameschambers.com/2016/01/Strongly-Typed-Configuration-in-ASP-NET-Core-MVC/

  • 相关阅读:
    GridView使用CommandField删除列实现删除时提示确认框
    Web开发-表单验证
    GridView使用CommandField删除列实现删除时提示确认框
    c#中的delegate(委托)和event(事件)
    Asp.Net中的三种分页方式
    java数组,遍历数组
    Java循环结构
    java选择结构
    易混运算符
    局部变量与成员变量
  • 原文地址:https://www.cnblogs.com/Irving/p/5175217.html
Copyright © 2011-2022 走看看