zoukankan      html  css  js  c++  java
  • ASP.NET Core 中的配置

    .NET Core 定义配置的方式不同于之前 NET 版本,之前是依赖于 System.Configuration 的 app.config 和 XML 配置文件 web.config。 新的配置系统更加轻量级,并且具有更好的扩展性,其最大的特点就是支持多样化的数据源。我们可以采用文件格式(INI、JSON 或 XML),也可以使用内存的变量作为配置的数据源,或直接配置定义在持久化的文件甚至数据库中。

    以键-值对的形式读取配置

    新建一个 ASP .NET Core Web 应用程序,修改appsettings.json为:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Warning"
        }
      },
      "AllowedHosts": "*",
    
      "option1": "value1_from_json",
      "option2": 2,
    
      "subsection": {
        "suboption1": "subvalue1_from_json",
        "suboption2": "subvalue2_from_json"
      },
    
      "wizards": [
        {
          "Name": "Gandalf",
          "Age": "1000"
        },
        {
          "Name": "Harry",
          "Age": "17"
        }
      ],
    
      "EnvConfig":  "Production"
    }
    

    在ConfigureServices方法里面添加如下测试代码:

    //直接访问,节点由冒号(:)分隔
    var option1 = Configuration["option1"];
    var suboption1 = Configuration["subsection:suboption1"];
    var wizards_0 = Configuration["wizards:0:Name"];
    
    Console.WriteLine($"option1: {option1}");
    Console.WriteLine($"subsection:suboption1: {suboption1}");
    Console.WriteLine($"wizards:0:Name: {wizards_0}");
    

    查看输出:

    TestConfigration> option1: value1_from_json
    TestConfigration> subsection:suboption1: subvalue1_from_json
    TestConfigration> wizards:0:Name: Gandalf
    

    多环境配置

    修改更改appsettings.Development.json为:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Debug",
          "System": "Information",
          "Microsoft": "Information"
        }
      },
    
      "EnvConfig": "Development"
    }
    

    注意EnvConfig的配置值为Development。

    在ConfigureServices方法里面添加如下测试代码:

    //多环境配置
    var envConfig = Configuration["EnvConfig"];
    
    Console.WriteLine($"EnvConfig: {envConfig}");
    

    Debug执行获取的是appsettings.Development.json里面的值,输出

    EnvConfig: Development
    

    直接执行获取的是appsettings.json里面的值,输出

    EnvConfig: Production
    

    多坏境配置文件获取代码位于Program类中的WebHost.CreateDefaultBuilder方法里:

    IHostingEnvironment hostingEnvironment = hostingContext.HostingEnvironment;
    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
    

    读取结构化的配置数据

    添加一个类 TestSubSectionConfig 对应于配置文件中的 subsection 节点

        public class TestSubSectionConfig
        {
            public string SubOption1 { get; set; }
            public string SubOption2 { get; set; }
        }
    

    在ConfigureServices方法里面添加如下测试代码:

    //使用GetSection解析配置文件的节
    var subsectionOptions = Configuration.GetSection("subsection").Get<TestSubSectionConfig>();
    var suboption2 = subsectionOptions.SubOption2;
    
    Console.WriteLine($"subsection:suboption2: {suboption2}");
    

    查看输出:

    subsection:suboption2: subvalue2_from_json
    

    如果需要在Controller里面使用,可以通过依赖注入的方式:

    在ConfigureServices里面注册配置项。

    public void ConfigureServices(IServiceCollection services)
    {
        //注册配置到服务容器
        services.Configure<TestSubSectionConfig>(Configuration.GetSection("subsection"));
        
        //var subsectionOptions = Configuration.GetSection("subsection").Get<TestSubSectionConfig>();
        //services.Configure<TestSubSectionConfig>(options =>
        //{
        //    options.SubOption1 = subsectionOptions["suboption1"];
        //    options.SubOption2 = subsectionOptions["suboption2"];
        // });
    
    }
    

    在Controller里面读取:

    public class HomeController : Controller
    {
        private TestSubSectionConfig _subSectionConfig;
        private ILogger<HomeController> _logger; 
    
        public HomeController(IOptions<TestSubSectionConfig> option, ILogger<HomeController> logger)
        {
            _subSectionConfig = option.Value;
            _logger = logger;
        }
    
        public IActionResult Index()
        {
            _logger.LogInformation($"SubOption1: {_subSectionConfig.SubOption1}");
            _logger.LogInformation($"SubOption2: {_subSectionConfig.SubOption2}");
            return View();
        }
    }
    

    查看输出:

    TestConfigration.Controllers.HomeController:Information: SubOption1: subvalue1_from_json
    TestConfigration.Controllers.HomeController:Information: SubOption2: subvalue2_from_json
    

    参考

  • 相关阅读:
    144.二叉树的前序遍历
    103.二叉树的锯齿形层次遍历
    shiro系列二、身份验证和授权
    shiro系列一、认识shiro
    发送短信——java
    redis系列二: linux下安装redis
    redis系列一: windows下安装redis
    BootstrapValidator 表单验证超详细教程
    Linux ps 命令详解
    Vmvare 虚拟机固定IP
  • 原文地址:https://www.cnblogs.com/royzshare/p/9436018.html
Copyright © 2011-2022 走看看