.NET Core - 配置绑定:使用强类型对象承载配置数据

简介: .NET Core - 配置绑定:使用强类型对象承载配置数据

配置绑定

本节学习,配置绑定---使用强类型对象承载配置数据,这样做的目的是为了更方便的管理配置对象。因为,这意味着,我们可以直接从对象来查看配置的信息。如下,我们有一个json配置文件

{
  "key1": "value1",
  "key2": 0,
  "Section1": {
    "key3": "value3",
    "key4": 10,
    "key5": true
  }
}

我们先定义一个用来承载配置的类,将其定义为ConfigModel

class ConfigModel
{
    public String key1 { get; set; }
    public int key2 { get; set; }
    public int key4 { get; set; }
    public bool key5 { get; private set; } = false;
}

首先,我们利用文件提供程序类型来加载配置

IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("settings.json");
IConfigurationRoot configurationRoot = configurationBuilder.Build();

配置绑定我们通过Bind方法,如下,我们给ConfigModel来赋值初始值,以便与最后的结果做比较

ConfigModel configModel = new ConfigModel() { key1 = "value1new", key2 = 10 ,key4=30};
//可以进行对此绑定,应该还可以绑定到不同的对象。
configurationRoot.Bind(configModel);

我们可以同时将配置绑定到多个对象,比如,我们可能加载了多个配置文件,或者以配置文件的多个Section等来区分,我们可以进行多次绑定

ConfigModel configModel = new ConfigModel() { key1 = "value1new", key2 = 10 ,key4=30};
//可以进行对此绑定,应该还可以绑定到不同的对象。
configurationRoot.Bind(configModel);
//获取节,并绑定
configurationRoot.GetSection("Section1").Bind(configModel);
//...

私有变量/方法的处理

如上,ConfigModel中的key5的set方法是private的,也就意味着,我们在类外部无法直接调用其set方法,那么,我们该如何将配置文件中的值赋值到类呢?

这里,我们需要用到BinderOptions。Bind()带有第二个参数BinderOptions,可以让我们指定绑定选项。如我们要给key5赋值

configurationRoot.GetSection("Section1").Bind(configModel,options=> { options.BindNonPublicProperties = true; });

这里options.BindNonPublicProperties = true代表我们允许绑定私有属性。

这样我们就可以获取到私有变量的值了。

 

其实,在实际的开发过程中,我们一般都会用类来承载我们的配置,因为这样,不仅可以更直观的了解配置,而且便于对配置进行管理。下面一节,学习如何低成本实现自定义的配置源。

 

源码可访问

https://github.com/IronMarmot/Samples/tree/master/CoreSamples


相关文章
|
18天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
1月前
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
9 0
|
3月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
72 0
|
3月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
37 0
|
3月前
|
开发框架 JavaScript .NET
ASP.NET Core的超级大BUG
ASP.NET Core的超级大BUG
43 0
|
1月前
|
SQL 数据库
使用ADO.NET查询和操作数据
使用ADO.NET查询和操作数据
10 0
|
1月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
65 0
|
2月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
36 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报