首页 > 编程语言 >02C#选项方式(Options)读取配置

02C#选项方式(Options)读取配置

时间:2023-12-14 09:33:31浏览次数:35  
标签:02 实体类 string 配置文件 C# public Proxy services Options

上篇文章的讲解,配置文件可以转换成实体类,这篇文章讲解如何通过选项方式结合依赖注入进行配置

目的:实体类可以通过依赖注入获取配置文件映射的实体类

1)安装Nuget包:Microsoft.Extensions.Options

2)配置Json文件于实体类的映射并注册到容器中

3)实体类通过构造函数注入配置类,有3种方式:

        IOption:不实时更新(配置文件更新,映射的实体不更新)

        IOptionMonitor:瞬时更新(配置文件更新,映射的实体马上更新)

       IOptionSnapShot:在一个scope内保持一致,推荐使用

下面讲解代码:

        webConfig.json配置文件

{
  
    "Name": "yxh",
    "Age": "18",
    "Proxy": {"Address": "yxh.com","Port": "80"}
  
}

    映射的实体类,WebConfig对应配置文件的根节点,Proxy对应配置文件的Proxy对象

 public class WebConfig
 {
     public string Name { get; set; }
     public string Age { get; set; }

     public Proxy Proxy { get; set; }

     public override string ToString()
     {
         return $"Name:{Name},Age:{Age},{Proxy.ToString()}";
     }
 }

 public class Proxy
 {
     public string Address { get; set; }
     public string Port { get; set; }

     public override string ToString()
     {
         return $"Address:{Address},Port:{Port}";
     }
 }

Test1Mode是注入了Proxy的实体类,Test2Mode是注入了WebConfig的实体类

public class Test1Model
{
    private readonly IOptionsSnapshot<Proxy> optionsSnapshot;

    public Test1Model(IOptionsSnapshot<Proxy> optionsSnapshot)
    {
        this.optionsSnapshot = optionsSnapshot;
    }

    public void Test()
    {
      Proxy proxy=  this.optionsSnapshot.Value;
        Console.WriteLine(proxy.ToString());
    }
}

 public class Test2Model
 {
     private readonly IOptionsSnapshot<WebConfig> _snapshot;

     public Test2Model(IOptionsSnapshot<WebConfig> snapshot)
     {
         _snapshot = snapshot;
     }
     public void Test()
     {
         WebConfig config = _snapshot.Value;
         Console.WriteLine(config.ToString()) ;
     }
 }

Main函数如下:

static void Main(string[] args)
{
    ConfigurationBuilder builder = new ConfigurationBuilder();
    builder.AddJsonFile("webconfig.json", false, true);
    IConfigurationRoot configurationRoot = builder.Build();

    ServiceCollection services = new ServiceCollection();
    services.AddScoped<Test1Model>();
    services.AddScoped<Test2Model>();


    //配置JSon中的部分对象与IConfigurationRoot的映射
    services.AddOptions().Configure<Proxy>(e => configurationRoot.GetSection("Proxy").Bind(e));
    //配置Json的根对象与IConfigurationRoot的映射
    services.AddOptions().Configure<WebConfig>(e => configurationRoot.Bind(e));


    while (true)
    {
        using (var scope = services.BuildServiceProvider())
        {
            var test1 = scope.GetRequiredService<Test1Model>();
            test1.Test();
            Console.ReadKey();
            var test2 = scope.GetRequiredService<Test2Model>();
            test2.Test();
        }
        Console.ReadKey();
    }

}

 

标签:02,实体类,string,配置文件,C#,public,Proxy,services,Options
From: https://www.cnblogs.com/yxh33/p/17900464.html

相关文章

  • 八、后代组件数据双向Provide和Consume
    祖宗组件向后代组件传递数据并实现数据的双向绑定,即:祖宗组件的数据改变则后代组件的数据也跟着变化,后代组件数据变化则祖宗组件的数据也跟着变化。这里需要在祖宗中使用@Provide装饰器,后代组件需要使用@Consume装饰器以下代码说明了两点注意:1.祖宗组件使用@Provide,孙组件使用@C......
  • CNS0创建交货单没有WBS元素
    1、问题CNS0创建交货单带不出WBS,但是交货单过账之后,又可以读取到WBS。2、原因2.1、项目挂料创建项目挂料时,当物料为通用料,则在网络中挂料时,采购类型为网络预留当物料为专用料,则在网络中挂料时,采购类型为WBS要素预留,并显示WBS要素(此处修改通用物料为专用料,再次挂料)物料的......
  • C++ Qt开发:Slider滑块条组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Slider滑块条组件的常用方法及灵活运用。当涉及到C++Qt开发中的Slider滑块条组件时,你可能会用到......
  • UE4 World Composition机制
    世界场景构成(WorldComposition)属于关卡流送的一种,旨在简化大型世界场景的子关卡管理,通过关卡流送的方式读取地块信息,减轻运行压力,从而实现大型世界场景的运行。与传统关卡管理方式的区别:无需手动将关卡添加到场景中,只需将关卡放置到主地图所在的目录下(可建子目录)。 主关卡(Pe......
  • 使用OpenCV看视频
    importcv2#video=cv2.VideoCapture("rtsp://192.168.0.200:554/av0_0")video=cv2.VideoCapture("fire.mp4")#获取视频帧数frame_count=int(video.get(cv2.CAP_PROP_FRAME_COUNT))#获取fps,每秒传输帧数(Framespersecond)fps=int(round(video.get(c......
  • leetcode 209. 长度最小的子数组
    题目:209.长度最小的子数组题目描述:给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的连续子数组[numsl,numsl+1,...,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。我的思路:这道题目暴力......
  • 【专题】2023中国新母婴人群研究报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34538原文出处:拓端数据部落公众号在回归母婴行业主题的背景下,我们发现了一个普遍讨论的热点问题——生育率的下降。随着主要母婴群体和市场环境的变化,母婴行业已经进入存量竞争阶段。为了应对这一挑战,母婴品牌和服务机构需要调整经营思路,以赢得消......
  • R语言贝叶斯Metropolis-Hastings采样 MCMC算法理解和应用可视化案例
    全文链接:https://tecdat.cn/?p=34543原文出处:拓端数据部落公众号贝叶斯MCMC模拟是一个丰富的领域,涵盖了各种算法,共同目标是近似后验模型。例如,使用的rstan包采用了一个HamiltonianMonteCarlo算法。用于贝叶斯建模的另一个rjags包采用了Gibbssampling算法。尽管细节有所不同,但......
  • CF1385 E
    我们发现好像和拓扑序有关我们做拓扑序的时候要是一个点没有有向边出去或者进来我们好像可以随意钦定该点其他无向边要是有有向边入和有向边出那么肯定寄有一种就直接钦定为该点其他有向边的方向就可以了其实具体实现的时候我们可以直接有向边拓扑序之后无向边钦定......
  • 2023年12月13日总结
    更好的观看总结今天是dp专题。感觉好难。那就这样吧,开启新的一天吧!决策单调性优化DP四边形不等式优化OI-WIKIDP的决策单调性优化总结--command_blockDP优化方法大杂烩--alex-wei四边形不等式考虑最简单的情形,我们要解决如下一系列最优化问题。\[f(i)=\min_{1\le......