首页 > 作文

.NET Core读取配置文件的方法

更新时间:2023-04-04 12:39:24 阅读: 评论:0

配置文件是每个项目最基础的部分,也是不可或缺的部分,比如:数据库连接、中间件属性等常见的配置。

今天这篇文章主要内容就是,在.net core项目中怎样去读取配置文件并使用。

提前准备

appttings.json 文件

{  "ur": {"urname": "赵一","urage": 18  }}

对应实体模型

public class uroption{public string urname { get; t; }public int urage { get; t; }}

常规读取

1、注册

在 startup 类中注册,主要用到的是 configure 方法:

rvices.configure<uroption>(configuration.getction("ur"));

2、控制器中注入并读取

public class homecontroller : controllerba{    private readonly uroption ur;    public homecontroller(ioptions<uroption> uroptions)    {        ur = uroptions.value;    }    [httpget]    public string get()    {        return $"姓名:{ur.urname},年龄:{ur.urage} ";    }}

输出结果:姓名:赵一,年龄:18

嵌套读取

我们对 appttings.json 文件做一点小小的改动,增加一个子节点 child

{  "ur": {"urname": "赵一","urage": 18,"child": {  "urname": "赵一的崽",  "urage": 2}  }}

再对注册的代码做一点小小的修改:

rvices.configure<uroption>(configuration.getction("ur:child"));

输出结果:姓名:赵一的崽,年龄:2

分实例读取

这个时候需求又有变化了,需要同时读取 urchild 节点的数据,我们试试下面的方法看可行不可行:

// 注册rvices.configure<uroption>(configuration.getction("ur"));rvices.configure<uroption>(configuration.getction("ur:child"));// 控制器public class homecontroller : controllerba{    private readonly uroption ur;    private readonly uroption child;    public homecontroller(ioptions<uroption> uroptions, ioptions<uroption> childoptions)    {        ur = uroptions.value;        child = childoptions.value;    }    [httpget]    public string get()    {        return $"姓名:{ur.urname},年龄:{ur.urage} \r\n姓名:{child.urname}中国医生 电影免费观看完整版2021,年龄:{child.urage}";    }}

输出结果很显然满足不了我们的需求:

姓名:赵一的崽,年龄:2姓名:赵一的崽,年龄:2

有的小伙伴肯定会说,在实体模型内在加一个子节点字段。这样肯定是没问题的,但是与常规读取方式就没什么两样了。

这里我要说的是分实例读取,引入 configure 的另一个重载方法,与之前不同的是多了一个参数 name

public static irvicecollection configure<toptions>(this irvicecollection rvices, string name, iconfiguration config) wher开机黑屏只有鼠标e toptions : class;

下面我们重新注册:

rvices.configure<uroption>("father", configuration.getction("ur"));rvices.configure<uroption>("son", configuration.getction("ur:child"));

在控制器构造函数中注入,也引入了一个新的接口对象:ioptionsmonitor

public class homecontroller : controllerba{    private readonly uroption ur;    private readonly uroption child;    public homecontroller(ioptionsmonitor<uroption> uroptions, ioptionsmonitor<uroption> childoptions)    {        ur = uroptions.get("father");        child = childoptions.get("son");    }    [httpget]    public string get()    {        return $"姓名:{ur.urname},年龄:{ur.urage} \r\n姓名:{child.urname},年龄:{child.urage}";    }

输出结果:

姓名:赵一,年龄:18姓名:赵一的崽,年龄:2

其实还有一个接口对象能实现这样的效果:ioptionssnapshot,那 ioptionsmonitorioptionssnapshot 有什么不同呢?请接着往下看。

ioptionsmonitor与ioptionssnapshot的不同之处

我们先来看看微软官方的注释:

ioptionsmonitor

//// 摘要://     ud for notifications when toptions instances change.//// 类型参数://   toptions://     the options type.public interface ioptionsmonitor<out toptions>{    //    // 摘要:    //     returns the current toptions instance with the microsoft.extensions.options.options.defaultname.    toptions currentvalue { get; }    //    // 摘要:    //     returns a configured toptions instance with the given name.    toptions get(string name);    //    // 摘要:    //     registers a listener to be called whenever a named toptions changes.    //    // 参数:    //   listener:    //     the action to be invoked when toptions has changed.    //    // 返回结果:    //     an system.idisposable which should be dispod to stop listening for changes.    idisposable onchange(action<toptions, string> listener);}

ioptionssnapshot

//// 摘要://     ud to access the value of toptions for the lifetime of a request.//// 类型参数://   toptions://     options type.public interface ioptionssnapshot<out toptions> : ioptions<toptions> where toptions : cla如何学好化学ss, new(){    //    // 摘要:    //     returns a configured toptions instance with the given name.    toptions get(string name);}

从字面上理解,ioptionsmonitor 建议在配置信息更改后需要通知的场景下使用2005年高考作文,所以多了个 onchange 的方法;而 ioptionssnapshot 翻译过来的意思是:用于在请求的生命周期内访问配置,有点难以理解哈,我们接下来用代码来验证一下。

ioptionsmonitor 与 ioptionssnapshot的生命周期

我们对实体模型再做一点小小的修改,增加一个 guid 字段,并给上默认值:

public class uroption{    public string urname { get; t; }    public int urage { get; t; }    宁夏高考成绩查询时间public guid guid { get; t; } = guid.newguid();}

我们再次运行程序:

father — 姓名:赵一,年龄:19,编号:e0d71f47-e8f1-4a6d-875e-2074c985f4a0 son — 姓名:赵一的崽,年龄:3,编号:d865151b-f9bf-4eff-bb4e-8ab6dc61160c

然后不停的刷新页面会发现,father 的编号没有发生任何编号,而 son 的编号每次刷新都会改变。这是不是比较像我们注册时所用到的三种模式:

rvices.addscoped();rvices.addtransient();rvices.addsingleton()

其中 father 类似 addsingletonson 则类似 addscopedaddtransient

大家可以在同一个方法里多次调用 childoptions.get("son") 看看 son 到底时类似 addscoped 还是 addtransient

ioptionsmonitor的onchange调用方式

uroptions.onchange((ur,name)=> { console.writeline(ur.urname +"-"+ name); });

无文件配置

无文件配置就是不需要以静态文件的方式进行配置。相关信息在配置一次后就不用再做修改,我们可以采用无文件配置的方式,比如我们熟悉的 addcors 跨域配置

rvices.addcors(op => {op.addpolicy(corsname, t => {t.tisoriginallowed(origin => true).allowanyheader().allowanymethod().allowcredentials();            });        });

我们对之前的注册方法进行一下改动:

rvices.configure<uroption>(c =>{c.urname = "钱二";c.urage = 60;});

控制器注入采用常规的注入方式,最终输出结果:姓名:钱二,年龄:60

分享一个源码查看网站:https://source.dot.net/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。

本文发布于:2023-04-04 12:39:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/2189cc6bf27c45f0ad75687c4347fadd.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:.NET Core读取配置文件的方法.doc

本文 PDF 下载地址:.NET Core读取配置文件的方法.pdf

标签:姓名   年龄   的是   摘要
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图