在要求输入邮箱的文本域,请填写真实的邮件地址。非真实邮件地址,将收不到回复信息。

.net core配置信息appsettings读取

.net core 清风 1183℃ 0评论

因为使用.net core写了一些简单的控制台应用程序,并且需要一些配置信息。于是想是用.net framework中的 ConfigurationManager进行处理,发ConfigurationManager在.net core 中不被支持。

.net core配置说明

.NET CORE 配置主要涉及三个对象,它们分别是Configuration、ConfigurationBuilder和ConfigurationProvider,Configuration对象承载着在编程过程中使用的配置信息,ConfigurationProvider则是配置信息原始数据源的提供者,两者之间沟通由ConfigurationBuilder来完成,它利用ConfigurationProvider提取源数据将其转换为Configuration对象。


IConfigurationRoot Configuration { get; set; }
 var builder = new ConfigurationBuilder()
           .SetBasePath(Directory.GetCurrentDirectory())
           .AddJsonFile("appsettings.json",optional:true,reloadOnChange:true);
            Configuration = builder.Build();

键值读取

Configuration 类只是一个提供了读写名/值对能力的 Providers 集合。通过ConfigurationProvider数据源提供者,配置生成对应的Configuration对应,可以获取名/值对。采用appsettings.json作为数据源,我们配置如下的数据。

{
  "version": "1.0.0",
  "AppConfig": {
    "SiteUrl": [
      {
        "AppName": "清风博客",
        "CheckUrl": "https://www.mlplus.net",
        "SendMobile": "130********"
      },
      {
        "AppName": "蚂蚁部落",
        "CheckUrl": "http://www.softwhy.com",
        "SendMobile": "130********"
      }
    ]
  }
}

对于存储在一个有层次的结构中,尤其是使用外部文件(如 JSON、XML、INI)时,可以使用以 : 符号分隔(从层次结构的根开始)的键来取回配置值。使用生成的Configuration读取version和AppConfig的值,如下所示:


Configuration.GetSection("version").Value;
Configuration["version"];

对象读取

将一个对象的属性视为它的子节点,这样对象同样具有类似于Configuration对象的树形层次化结构。可以根据配置的结构来定义这个Option类型,那么Option类型的属性成员将与某个配置节具有一一对应的关系,从而将配置信息绑定为一个具体的Option对象。.NET Core针对配置的Option模型(OptionModel)帮助我们实现了从配置到Option对象之间的绑定,Option模型实现在Microsoft.Extensions.OptionsModel这个NuGet包。创建一个简单的 MyOptions 类如下所示:


    public class AppConfig
    {
        public IList SiteUrl { get; set; }
    }
    public class Site
    {
        public string AppName { get; set; }
        public string CheckUrl { get; set; }
        public string SendMobile { get; set; }
    }

通过调用 Configure 将一个 IConfigureOptions 服务加入服务容器,是为了之后应用程序或框架能通过 IOptions 服务来获取配置选项。这里需要.net core 的依赖注入Microsoft.Extensions.DependencyInjection。


using System.Collections.Generic;
using System.IO;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
    public sealed class ConfigUtil
    {
        private IConfigurationRoot Configuration { get; set; }
        private static ConfigUtil configUtil = null;
        private static readonly object locker = new object();
        private AppConfig appseting;
        public AppConfig AppSeting { get { return appseting; } }
        public static ConfigUtil GetConfigUtil()
        {
            if (configUtil == null)
            {
                lock (locker)
                {
                    if (configUtil == null)
                    {
                        configUtil = new ConfigUtil();
                    }
                }
            }
            return configUtil;
        }
        private ConfigUtil()
        {
            string path = Directory.GetCurrentDirectory();
            var builder = new ConfigurationBuilder()
                .SetBasePath(path)
                .AddJsonFile("appsettings.json",true,true);
            Configuration = builder.Build();
            var sp = new ServiceCollection()
                .AddOptions()
                .Configure(Configuration.GetSection("AppConfig"))
                .BuildServiceProvider();
           var config=sp.GetService>();
            appseting = config.Value;
        }
    }




转载请注明:清风亦平凡 » .net core配置信息appsettings读取

喜欢 (1)or分享 (0)
支付宝扫码打赏 支付宝扫码打赏 微信打赏 微信打赏
头像
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址