zoukankan      html  css  js  c++  java
  • NetCore 配置文件---直接读取及选项模式读取

    十年河东,十年河西,莫欺少年穷

    学无止境,精益求精

    1、如果项目中没有操作配置文件相关的包,请执行如下PM命令:

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

    2、NetCore中读取配置文件,分为:直接通过键值对的模式读取,另一种就是选项模式,所谓的选项模式,是将讲配置文件中的配置转化为相关类,然后读取类中的属性即可完成读取配置文件。

    本例中以NetCore Web MVC 应用程序来说明,目录如下(其实只用到WebApplication1项目):

     新建完MVC项目后,我们来完善下我们的配置文件:appsettings.json ,如下:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "ConnectionStrings": {
        "StudentDBContext": "Data Source=DESKTOP-VD79APR\SQLEXPRESS;Initial Catalog=StudentDB;User ID=sa;Password=cch@225836.sa;"
      },
      "Zoon": {
        "CatZoon": {
          "Cat": "小花猫",
          "Lion": "狮子",
          "Triger": "老虎",
          "Leopard": "花豹"
        },
    
        "DogZoon": {
          "Dog": "小花狗",
          "Wolf": ""
        }
      }
    }

    首先,我们需要将配置文件接口注入到控制器中

            private readonly ILogger<HomeController> _logger;
            private IConfigurationRoot ConfigRoot;
            private readonly ZoonOptions _options;
    
            public HomeController(ILogger<HomeController> logger, IConfiguration configRoot, IOptions<ZoonOptions> options)
            {
                _options = options.Value;
                ConfigRoot = (IConfigurationRoot)configRoot;
                _logger = logger;
            }

    直接读取,很简单,通过键值对读取即可,如下:

                //基本读取 : 会读取在应用启动后对 JSON 配置文件所做的更改
                var cat = ConfigRoot["Zoon:CatZoon:Cat"];
                ViewBag.cat = cat;

    注:当程序发布运行后,配置文件改变,读取的结果会相应改变。

    选项模式

    1、选项模式中,类名的命名规则为配置块根节点的名称 加 Options

    2、选项模式中必须声明和配置块根节点名称一致的变量及值

    下面我们将通过选项模式读取 Zoon 节点下的属性节点,要想使用选项模式,就必须创建一个和 Zoon 节点配置块相同结构的类,因此,我们需要创建如下类:

    namespace WebApplication1.Models
    {
        /// <summary>
        /// 选项模式中,类名的命名规则为配置块根节点的名称 加 Options
        /// </summary>
        public class ZoonOptions
        {
            public ZoonOptions()
            {
                CatZoon = new CatZoon();
                DogZoon = new DogZoon();
            }
            /// <summary>
            /// 选项模式中必须声明和配置块根节点名称一致的变量及值
            /// </summary>
            public const string Zoon = "Zoon";
            public CatZoon CatZoon { get; set; }
            public DogZoon DogZoon { get; set; }
        }
    
        public class CatZoon
        {
            public string Cat { get; set; }
            public string Lion { get; set; }
            public string Triger { get; set; }
            public string Leopard { get; set; }
        }
        public class DogZoon
        {
            public string Dog { get; set; }
            public string Wolf { get; set; }
    
        }
    }

    基本的选项模式有两个方法读取配置文件,一个是Bind()方法,一个是Get()方法,如下:

                //选项模式 Bind : 会读取在应用启动后对 JSON 配置文件所做的更改
                var ZoonOptions = new ZoonOptions();
                ConfigRoot.GetSection(ZoonOptions.Zoon).Bind(ZoonOptions);
                var Triger = ZoonOptions.CatZoon.Triger;
                ViewBag.Triger = Triger;
                var Dog = ZoonOptions.DogZoon.Dog;
                ViewBag.Dog = Dog;
                //选项模式 Get :会读取在应用启动后对 JSON 配置文件所做的更改
                var ZoonOptions_Get = ConfigRoot.GetSection(ZoonOptions.Zoon)
                                                        .Get<ZoonOptions>();
                ViewBag.Lion = ZoonOptions_Get.CatZoon.Lion;
                ViewBag.Wolf = ZoonOptions_Get.DogZoon.Wolf;

    注:无论是GET()方法,还是Bind()方法,当程序发布运行后,配置文件改变,读取的结果会相应改变。

    当然,选项模式也支持在Strat.Up 启动类中注册,并全局使用,如下:

            public void ConfigureServices(IServiceCollection services)
            {
                services.AddControllersWithViews();
                //选项模式注册
                services.Configure<ZoonOptions>(Configuration.GetSection(
                                           ZoonOptions.Zoon));
                //services.AddRazorPages();
    
            }

    然后,就可以进行依赖注入了,

            private readonly ILogger<HomeController> _logger;
            private IConfigurationRoot ConfigRoot;
            private readonly ZoonOptions _options;
    
            public HomeController(ILogger<HomeController> logger, IConfiguration configRoot, IOptions<ZoonOptions> options)
            {
                _options = options.Value;
                ConfigRoot = (IConfigurationRoot)configRoot;
                _logger = logger;
            }

    读取配置文件如下:

                //选项模式 依赖注入 :不会读取在应用启动后对 JSON 配置文件所做的更改
                ViewBag.Leopard = _options.CatZoon.Leopard;

    OK截止到这儿,读取配置文件就结束了。

     最后贴出全部控制器代码,如下:

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Options;
    using WebApplication1.Models;
    
    namespace WebApplication1.Controllers
    {
        public class HomeController : Controller
        {
            private readonly ILogger<HomeController> _logger;
            private IConfigurationRoot ConfigRoot;
            private readonly ZoonOptions _options;
    
            public HomeController(ILogger<HomeController> logger, IConfiguration configRoot, IOptions<ZoonOptions> options)
            {
                _options = options.Value;
                ConfigRoot = (IConfigurationRoot)configRoot;
                _logger = logger;
            }
    
            public IActionResult Index()
            {
                //基本读取 : 会读取在应用启动后对 JSON 配置文件所做的更改
                var cat = ConfigRoot["Zoon:CatZoon:Cat"];
                ViewBag.cat = cat;
                //选项模式 Bind : 会读取在应用启动后对 JSON 配置文件所做的更改
                var ZoonOptions = new ZoonOptions();
                ConfigRoot.GetSection(ZoonOptions.Zoon).Bind(ZoonOptions);
                var Triger = ZoonOptions.CatZoon.Triger;
                ViewBag.Triger = Triger;
                var Dog = ZoonOptions.DogZoon.Dog;
                ViewBag.Dog = Dog;
                //选项模式 Get :会读取在应用启动后对 JSON 配置文件所做的更改
                var ZoonOptions_Get = ConfigRoot.GetSection(ZoonOptions.Zoon)
                                                        .Get<ZoonOptions>();
                ViewBag.Lion = ZoonOptions_Get.CatZoon.Lion;
                ViewBag.Wolf = ZoonOptions_Get.DogZoon.Wolf;
                //选项模式 依赖注入 :不会读取在应用启动后对 JSON 配置文件所做的更改
                ViewBag.Leopard = _options.CatZoon.Leopard;
                return View();
            }
    
            public IActionResult Privacy()
            {
                return View();
            }
    
            [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
            public IActionResult Error()
            {
                return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
            }
        }
    }
    View Code

    可参考微软教程:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1

    @天才卧龙的博客

  • 相关阅读:
    TabActivity 、fragemnt+fragment 和 Fragment+Viewpager 优缺点
    Android App的签名打包(晋级篇)
    Android ProgressBar 进度条荧光效果
    Android UI【android 仿微信、QQ聊天,带表情,可翻页,带翻页拖动缓冲】
    Android UI--自定义ListView(实现下拉刷新+加载更多)
    Android平台下利用zxing实现二维码开发
    自定义组件---图片和文字实现ImageButton效果
    JNI由浅入深_10_JNI 综合开发
    开关按钮实现
    Android Asynctask与Handler的比较,优缺点区别,Asynctask源码
  • 原文地址:https://www.cnblogs.com/chenwolong/p/13182510.html
Copyright © 2011-2022 走看看