.NET Core配置系统和日志

在传统的软件开发中,我们一般把数据库连接字符串等配置项放到配置文件中去,比如.NET Framework中的Web.config文件,这样如果需要修改程序连接的数据库,我们只需要修改配置文件就可以了,但是当项目变复杂以后呢,我们不能每次都去修改对应的配置文件吧,这样太复杂了…

文章目录

  • 前言
  • 一、基本使用
    • 选项方式读取配置(推荐)


前言

今天所记录的就是为了解决这个问题的,.NET Core的配置系统,而且夺取配置有很多方式


一、基本使用

我们现在熟悉一下配置系统的基本使用:
1,我们先在根目录下添加一个JSON文件config.json

.NET Core配置系统和日志_第1张图片
2,安装基础开发包Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Json

  • NuGet解决方案位置

第二个
.NET Core配置系统和日志_第2张图片
然后在浏览里找到搜索框,依次输入

Microsoft.Extensions.Configuration
在这里插入图片描述

3,接下来就是读取配置的代码

ConfigurationBuilder configBuilder = new ConfigurationBuiler();
//向ConfigurationBuilder添加了一个待解析的配置文件,optional参数表示这个文件是否可选,reloadOnChange参数表示如果文件修改了,是否重新加载配置。
configBuilder,AddJsonFile("config.json",optional: false,reloadOnchange:false);
//构建IConfigurationRoot对象,我们能够通过它读取配置项,如果配置分级,也可以用“proxy:address”这种冒号分隔的方式读取配置项。
IConfigurationRoot config = configBuilder.Builder();
string name = config("name");
string proxyAddress = config.GetSection("proxy:address").Value;
Console.WriteLine($"Address:{proxyAddress}");

需要注意的是,IConfigurationRoot中有一个GetConnectionString(string name)方法用于获取连接字符串,它读取“ConnectionStrings”节点下的名为name的值作为连接字符串。“ConnectionStrings”只是一个建议,不是.NET Core要求必须使用这个节点保存数据库连接字符串。

选项方式读取配置(推荐)

第一步,还是安装包
在这里插入图片描述
在这里插入图片描述
第二步,建配置文件 appsettings.json,模型类

{
  "Logging": { "LogLevel": { "Default": "Warning" } },
  "DB": {
    "DbType": "SQLServer",
    "ConnectionString": "Data Source=.;Initial Catalog=DemoDB; Integrated Security=True"
  },
  "Smtp": {
    "Server": "smtp.youzack.com",
    "UserName": "zack",
    "Password": "hello888"
  },
  "AllowedHosts": "*"
}

模型类

public class DbSettings
{
    public string DbType { get; set; }
    public string ConnectionString { get; set; }
}
public class SmtpSettings
{
    public string Server { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
}

用于测试读取配置的Demo类
.NET Core配置系统和日志_第3张图片
注入服务到容器

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

ConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
IConfigurationRoot config = configBuilder.Build();
ServiceCollection services = new ServiceCollection();
services.AddOptions()
    .Configure<DbSettings>(e => config.GetSection("DB").Bind(e))
    .Configure<SmtpSettings>(e => config.GetSection("Smtp").Bind(e));
services.AddTransient<Demo>();
using (var sp = services.BuildServiceProvider())
{
    while (true)
    {
        using (var scope = sp.CreateScope())
        {
            var spScope = scope.ServiceProvider;
            var demo = spScope.GetRequiredService<Demo>();
            demo.Test();
        }
        Console.WriteLine("可以改配置啦");
        Console.ReadKey();
    }
}

.NET Core配置系统和日志_第4张图片

你可能感兴趣的:(C#自学,.netcore,c#)