ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

配置文件的使用

2022-01-23 18:33:01  阅读:178  来源: 互联网

标签:configuration 配置文件 database ViewBag IConfiguration 使用 Configuration


1、如何添加及读取配置文件信息

一个项目的配置可以写在文件、内存或数据库等里面。默认配置文件appsettings.json,这是json格式数据(当然也可以是INI和XML)。
为了不影响本项目,我们建立一个测试项目(AppingSettingReadDemo),也为.Net Core MVC项目。

1.如何添加配置信息(往原有的appsettings.json文件中写)

,
  "option1": "value1",//最简单键——值对格式
"option2": {
      "suboption2": {
          "subkey1": "subvalue1",
          "subkey2": "subvalue2"
     }
  },  "database": { //键——对象格式
    "Server": "IP地址:port",
    "Name": "DBTest",
    "UId": "sa",
    "Password": "123456"
  },
  "students": [//数组格式
    {
      "Name": "张三",
      "Age": "20"
    },
    {
      "Name": "李四",
      "Age": "21"
    }
  ]

2.如何读取配置信息

IConfiguration:是有关配置文件最底层的一个接口类型,要获取配置信息就要通过这个类型对象。
(1)弱类型读取方式
切换到HomeController。
如何获取IConfiguration对象呢?——依赖注入,通过构造方法依赖注入。
通过构造方法怎么就能注入对象呢??这就是因为.Net Core内置了依赖注入,这里我们只告诉了configuration为IConfiguration类型,那么.Net Core内置DI就会自动去调用IConfiguration实现类的构造方法生成实例对象configuration。
DI——负责实例化应用程序中的对象及建立这些对象之间的依赖;维护对象之间的生命周期。

private IConfiguration Configuration;
        //通过构造函数注入Configuration对象
        public HomeController(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IActionResult Index()//这个地方不能有IConfiguration configuration参数的
        {
            string str1 = Configuration["option1"];
            string str2 = Configuration["database:Name"];
            string str3 = Configuration["option2:suboption2:subkey2"];
            string str4Name = Configuration["students:0:Name"];//读取数组,此处0表示数组的第1项
            string str4Age = Configuration["students:0:Age"];
            string str5Name = Configuration["students:1:Name"];//读取数组,此处1表示数组的第2项
            ViewBag.Value1 = str1;
            ViewBag.Value2 = str2;
            ViewBag.Value3 = str3;
            ViewBag.Name1 = str4Name;
            ViewBag.Age1 = str4Age;
            ViewBag.Name2 = str5Name;
            return View();
        }

前端Index.cshtml

@{
    ViewData["Title"] = "Home Page";
}
@ViewBag.Value1
@ViewBag.Value2
@ViewBag.Value3
@ViewBag.Name1
@ViewBag.Age1
@ViewBag.Name2
<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

在这里插入图片描述
如果中文出现乱码,解决方案——把配置文件appsetting.json重新以UTF-8编码保存。具体操作如下:
选择appsetting.json文件|文件|appsetting另存为,弹出对话框如下对话框,单击【编码保存】,弹出对话框,选择UTF-8编码,如下图所示。单击【确定】保存即可。
在这里插入图片描述
在这里插入图片描述
(2)强类型配置
假设要获取前面database节配置信息。
第一步:创建配置映射类(先新建一个Configs文件夹),然后创建一个类,比如Database.cs,定义类中的属性与配置节的key对应。
在这里插入图片描述
第二步:注入服务(Database.cs类)。在Startup.cs中把Database类与配置文件中的databse配置节建立关联

public void ConfigureServices(IServiceCollection services)
        {
      
            //把配置文件中的database配置节映射到Database类     
            services.Configure<Database>(Configuration.GetSection("database"));
}

源码中可以看出在Startup.cs中,Configuration也是通过构造方法注入的。
在这里插入图片描述
第三步:强类型配置方式如何去使用呢?——注入IOptions类型对象,同样通过构造函数注入

private IConfiguration Configuration;
        private IOptions<Database> _database;
        //通过构造函数注入Configuration对象
        public HomeController(IConfiguration configuration, IOptions<Database> database)
        {
            Configuration = configuration;
            _database = database;
        }
public IActionResult Index()//这个地方不能有IConfiguration configuration参数的
        {
         
            Database db = _database.Value;//通过注入对象的Value属性得到Database实例对象
            ViewBag.database= $"server:{db.Server},name:{db.Name}";//然后就可以通过映射类Database类的实例对象获取其属性值。此处采用占位符写法,前面的$符号不能少
          
            return View();
        }

思考以下几个问题:
1、程序运行期间,如果配置文件发生了变化,程序会自动加载新的配置吗?
目前是不能的。因为IOptions类型对象为单例模式,即程序一单运行起来,实例化后的对象就唯一。
把IOptions改为IOptionsSnapshot类型即可(上面黄色底纹的2处需要修改),属于Scoped类型服务,针对每次请求都会重新加载配置数据(所以每次都会读取配置文件信息)。
测试:只要修改了配置文件appsetting.json中的信息,比如修改端口号,刷新下页面,即看到改变后的结果——ok
2、每次加载都会重新读取配置文件,没有变化时也是这样的,这样会导致无用操作,能不能只在配置文件发生变化时才加载呢?
把IOptionsSnapshot改为IOptionsMonitor类型,该类型能自动监控配置文件的变化,自动加载最新配置。
此时_database. Value替换为_database.CurrentValue;因为这时不存在value属性。

标签:configuration,配置文件,database,ViewBag,IConfiguration,使用,Configuration
来源: https://blog.csdn.net/freeherotoday/article/details/122654828

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有