ASP.NET Core 1.0 Configuration 配置管理
documentation: https://docs.asp.net/en/latest/fundamentals/configuration.html
github: https://github.com/aspnet/Configuration/
项目结构
- 配置的接口定义与基础实现
- 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.htmlhttp://developer.telerik.com/featured/new-configuration-model-asp-net-core/
http://jameschambers.com/2016/01/Strongly-Typed-Configuration-in-ASP-NET-Core-MVC/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述