首页 > 其他分享 >.net 读取配置文件 使用DI方式

.net 读取配置文件 使用DI方式

时间:2023-11-30 10:14:34浏览次数:41  
标签:类库 Console 配置文件 DI get Extensions net public

需要引用包:
Microsoft.Extensions.Configuration 配置文件类库
Microsoft.Extensions.Configuration.Binder 将配置文件转换成实体类的类库
Microsoft.Extensions.Configuration.Json 读取Json文件的类库
Microsoft.Extensions.DependencyInjection DI类库
Microsoft.Extensions.Options 热加载类库

1. 先创建一个配置文件config.json,并将属性->复制到输出目录->如果较新则复制

config.json内容如下:

{
  "name": "张三",
  "age": "18",
  "students": {
    "name": "张同学",
    "age": 22
  }
}

2. 创建配置文件对象的实体类:

internal class Student
{
    public int age { get; set; }
    public string Name { get; set; }
}
internal class Teacher
{
    public string Name { get; set; }
    public int Age { get; set; }
    public Student Students { get; set; }
}

3. 创建使用到配置文件的类

internal class Test
{
    private readonly IOptionsSnapshot<Teacher> _optionsSnapshot;
    //private readonly IOptionsMonitor<Teacher> _optionsMonitor;
    public Test(IOptionsSnapshot<Teacher> optionsSnapshot)
    //public Test(IOptionsMonitor<Teacher> optionsMonitor)
    {
        this._optionsSnapshot = optionsSnapshot;
    }
    public void Run()
    {
        //Teacher teacher = this._optionsMonitor.CurrentValue;
        Teacher teacher = this._optionsSnapshot.Value;
        Console.WriteLine(teacher.Name);
        Console.WriteLine(teacher.Age);
    }
}

IOptionsSnapshot:在一个范围内,不会重新加载配置文件的内容,但出了范围后如果配置文件内容修改了,则重新加载。
IOptionsMonitor:配置文件的内容只会在启动时候加载

4. 在Main函数中注册读取配置文件的服务

static void Main(string[] args)
{
    // 实例化DI
    ServiceCollection services = new ServiceCollection();
    // 配置文件构造类
    ConfigurationBuilder builder = new ConfigurationBuilder();
    // 在类中添加本地的配置文件
    builder.AddJsonFile("config.json", false, true);
    // 初始化配置文件
    IConfigurationRoot config = builder.Build();
    // 在DI中注册配置文件的服务
    services.AddOptions().Configure<Teacher>(e=>config.Bind(e));
    services.AddScoped<Test>();
    using(ServiceProvider sp = services.BuildServiceProvider())
    {
        while (true)
        {
			// 创建一个范围
            using(IServiceScope scope = sp.CreateScope())
            {
                Test test = scope.ServiceProvider.GetRequiredService<Test>();
                test.Run();
                Console.ReadKey();
                test.Run();
                Console.ReadKey();
            }
        }

    }
    Console.ReadKey();
}

标签:类库,Console,配置文件,DI,get,Extensions,net,public
From: https://www.cnblogs.com/sunhouzi/p/17866631.html

相关文章

  • Redis数据类型操作和应用场景
    String常用指令#设置key-value类型的值>SETnamepan#根据key获得对应的value>GETname#判断某个key是否存在>EXISTSname#返回key所储存的字符串值的长度>STRLENname#删除某个key对应的值>DELname#批量设置key-value类型的值>MSET......
  • .net 读取配置文件
    .net可以读取多种不同类型的配置文件,如:json、xml、ini等。读取配置文件需要使用到的包:Microsoft.Extensions.Configuration读取配置文件主要类库Microsoft.Extensions.Configuration.Binder将配置文件转换为实体类的类库Microsoft.Extensions.Configuration.Json读取json......
  • 【Vulnhub 靶场】【Coffee Addicts: 1】【简单-中等】【20210520】
    1、环境介绍靶场介绍:https://www.vulnhub.com/entry/coffee-addicts-1,699/靶场下载:https://download.vulnhub.com/coffeeaddicts/coffeeaddicts.ova靶场难度:简单-中等发布日期:2021年5月20日文件大小:1.3GB靶场作者:BadByte靶场描述:我们的咖啡店被黑客入侵了!!你能修复......
  • [English]phonetic/adoption/rote/nursery
    Phonetic describesthewaythatspokenwordssound.AdoptioncomesfromtheOldFrenchwordadoptare,meaning"tochoseforoneself.”Feellikeaddinganoption?Ifyoustartdressinglikeafriend,that'sanadoptionofyourfriend's......
  • 【Azure Cache for Redis】Redis的导出页面无法配置Storage SAS时通过az cli来完成
    问题描述在AzureRedis的导出页面,突然不能配置StorageAccount的SAS作为授权方式。那么是否可以通过AZCLI或者是Powershell来实现SAS的配置呢? 问题解答可以的。使用  azredisexport 可以实现azredisexport--container--prefix[--auth-......
  • 【Azure Cache for Redis】Redis的导出页面无法配置Storage SAS时通过az cli来完成
    问题描述在AzureRedis的导出页面,突然不能配置StorageAccount的SAS作为授权方式。那么是否可以通过AZCLI或者是Powershell来实现SAS的配置呢? 问题解答可以的。使用  azredisexport 可以实现azredisexport--container--prefix[--auth-......
  • profinet协议之RTU转Modbus TCP
    profinet协议之RTU转ModbusTCPModbusRTU转ModbusTCP网关是一种重要的通信设备,它能够实现RTU和ModbusTCP之间的无缝通信。在工业领域中,RTU和ModbusTCP是常见的通信协议,它们分别适用于串口通信和以太网通信。然而,由于硬件设备的差异以及系统结构的限制,直接将RTU和ModbusTCP连......
  • Modbus转Profinet网关解决设备多、通讯效率慢、plc插槽号不够用等问题
    Modbus转Profinet网关解决设备多、通讯效率慢、plc插槽号不够用等问题大家好,我是小编今天要和大家分享一款解决设备通讯问题的神器——modbus转profinet网关。为了解决设备多、通讯效率慢的问题,我们可以使用兴达易控的modbus转profinet网关。这种方案非常有效,因为它可以将多个设备......
  • Redis基础
    NosqlNoSQL:即Not-OnlySQL(泛指非关系型的数据库),作为关系型数据库的补充。作用:应对基于海量用户和海量数据前提下的数据处理问题。Redis介绍概念Redis(REmoteDlctionaryServer)是用C语言开发的一个开源的高性能键值对(key-value)数据库特征1.数据间没有必然的关联关系......
  • 【Azure Cache for Redis】Redis的导出页面无法配置Storage SAS时通过az cli来完成
    问题描述在AzureRedis的导出页面,突然不能配置StorageAccount的SAS作为授权方式。那么是否可以通过AZCLI或者是Powershell来实现SAS的配置呢? 问题解答可以的。使用  azredisexport可以实现azredisexport--container--prefix......