Asp.Net Core 基础温习笔记 (2.配置文件的应用)

 本学习文章学习自: https://www.cnblogs.com/libingql/p/11326358.html
 以下仅为个人的温习学习记录


控制台应用程序:  


  Install-Package Microsoft.Extensions.Configuration
  Install-Package Microsoft.Extensions.Configuration.Json

{
  "id": "1",
  "login": {
    "isDelete": false,
    "loginInfo": {
      "username": "叶大白",
      "password": "123456"
    }
  },
  "userInfo":{
     "username": "叶大白2",
     "password": "7890"
  },
  "adressInfo": [
    {
      "adress": "安徽合肥"
    },
    {
      "adress": "安徽芜湖"
    }
  ]
}
  var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .AddJsonFile(".Development.json", optional: true, reloadOnChange: true);

  var config = builder.Build();

 //如果需要遍历,所有的配置文件的数据
 foreach (var provider in config.Providers)
 {
      provider.TryGet("ConnectionStrings:DefaultContext", out string defaultContext);
      Console.WriteLine(defaultContext);
 }

操作配置的方法汇总:
    1.  .SetBasePath(Directory.GetCurrentDirectory()) 设置从哪个目录读取配置文件 (Dir.. 获取当前进行所在的根目录)
   (如果appsettings.json在configs目录中,那么调用AddJsonFile应该指定的路径为"configs/appsettings.json"。)
    2.  .AddJsonFile("appsettings.json")  (配置键相同时,读取选择最后一个添加的文件(AddJsonFile), 若要读取所有添加文件的配置信息,可遍历ConfigurationRoot的Providers属性。)。
   添加读取json格式的文件 (如果使用xml和lni,AddXmlFile("appsettings.xml)或AddIniFile("appsettings.ini")) ,reloadOnChange  配置为true 可以进行热更新。

读取json的方式: 
    1.key 读取 (键不区分大小写。 例如,ConnectionString 和 connectionstring 被视为等效键,分层键使用冒号分隔符 (:),
     读取数组形式的配置,使用数组的下标索引,0表示第一个。 

Configuration["id"]; // 结果 1
Configuration["login:isDelete"]; // 结果 false
Configuration["login:loginInfo:username"]; // 结果 叶大白
Configuration["adressInfo:0:adress"]; // 结果 安徽合肥

    2. 绑定简单数据类型 GetValue<T>  (添加Package:Microsoft.Extensions.Configuration.Binder)

 var appID = config.GetValue<int>("AppID");

    3. 绑定到类对象  Get<T>

   public class userInfo
    {
        public string username { get; set; }

        public string password { get; set; }
    }
var node = config.GetSection("userInfo").Get<userInfo>();

   4.  绑定集合对象

"Test": {
    "userInfo": [
      {
        "username": "测试",
        "password": "密码"
      },
      {
        "username": "测试2",
        "password": "密码"
      },
      {
        "username": "测试3",
        "password": "密码"
      }
    ]
  }
  var children = config.GetSection("Test:userInfo").Get<IEnumerable<userInfo>>();

 


API应用程序

  api应用程序。会在根目录下自动创建Program.cs:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

   其中,CreateDefaultBuilder创建默认配置。(CreateDefaultBuilder的创建内容=>https://zhuanlan.zhihu.com/p/82978246?from_voters_page=true)

   按以下顺序加载应用配置  appsettings.json => appsettings.{Environment}.json。

1)  ConfigureServices中键值读取

  在Startup.cs中,默认带有属性     

  调用的方式是在ConfigureServices()  中采用键值对方式读取:

 int appid = Configuration.GetValue<int>("id");
 var nodes = config.GetSection("Test:userInfo").Get<IEnumerable<userInfo>>();

2)    ConfigureServices中使用Options 


 添加安装包:Microsoft.Extensions.Options.ConfigurationExtensions

 首先什么是Options。options是为了方便了在.NET Core应用程序中使用强类型配置。
 可以将config直接序列化。进行操作。否则需要
 1)将配置文件(比如appsettings.json)中的配置反序列化至配置类的实例中
  2)注入配置类的单例

使用时只需要构造注入即可在控制器中使用config的内容了:

3)    自定义读取配置文件 
  1.新建一个配置文件 test.json

{
  "id" : 100
}

  2.修改Program.js (在调用startup前。增加读取配置的json)

  public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
  {
        config.SetBasePath(Directory.GetCurrentDirectory());
        config.AddJsonFile("test.json", optional: true, reloadOnChange: true);
 })
        .UseStartup<Startup>();

   3.调用

public void ConfigureServices(IServiceCollection services)
{
    string id= Configuration.GetSection("id").Value;
}

 4)     独立类中读取配置
  
在.Net Framework中,ConfigurationManager类用于读取配置文件。但在.Net Core中没有该类,新建类ConfigurationManager用于读取配置文件。这样就可以像之前一样key取了

   public static class ConfigurationManager
    {
        public readonly static IConfiguration Configuration;

        static ConfigurationManager()
        {
            Configuration = new ConfigurationBuilder()
               .SetBasePath(Directory.GetCurrentDirectory())
               .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
               .Build();
        }

        public static T GetSection<T>(string key) where T : class, new()
        {
            return new ServiceCollection()
                .AddOptions()
                .Configure<T>(Configuration.GetSection(key))
                .BuildServiceProvider()
                .GetService<IOptions<T>>()
                .Value;
        }

        public static string GetSection(string key)
        {
            return Configuration.GetValue<string>(key);
        }
    }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值