分享一个 .NET Core 使用选项方式读取配置内容的详细例子

简介: 分享一个 .NET Core 使用选项方式读取配置内容的详细例子

前言

在 .NET Core 中,可以使用选项模式(Options Pattern)来读取和管理应用程序的配置内容。

选项模式通过创建一个 POCO(Plain Old CLR Object)来表示配置选项,并将其注册到依赖注入容器中,方便地在应用程序中访问和使用配置内容,这种方式避免了硬编码和字符串操作,是一种类型安全的访问方式。

而且将配置内容集中管理在一个 POCO 类中,便于维护和修改,降低了配置信息分散的风险。

下面看看 .NET Core 是如何使用选项方式读取配置内容。

Step By Step 步骤

  1. 创建一个 .NET Core Console 项目
  2. 从 Nuget 安装以下包

Microsoft.Extensions.Configuration

Microsoft.Extensions.Configuration.Binder

Microsoft.Extensions.Configuration.Json

Microsoft.Extensions.DependencyInjection

Microsoft.Extensions.Options

3.添加配置文件 appsettings.json,配置内容参考如下

{
  "Logging": { "LogLevel": { "Default": "Warning" } },
  "DB": {
  "DbType": "SQLServer",
  "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=TestDB;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Smtp": {
  "Server": "smtp.youzack.com",
  "UserName": "zack",
  "Password": "hello888"
  },
  "AllowedHosts": "*"
}

4.创建建对应配置项的两个模型类,即 POCO 类

public class DbSettings
{
  public string DbType { get; set; }
  public string ConnectionString { get; set; }
}
public class SmtpSettings
{
  public string Server { get; set; }
  public string UserName { get; set; }
  public string Password { get; set; }
}

5.创建测试读取配置的 Demo 类(重点看注释

using Microsoft.Extensions.Options;
class Demo
{
  // IOptionsSnapshot<T> 在配置改变后,可以不重新运行程序就读到新的值
  private readonly IOptionsSnapshot<DbSettings> optDbSettings;
  private readonly IOptionsSnapshot<SmtpSettings> optSmtpSettings;
  // 构造方法注入 IOptionsSnapshot
  public Demo(
    IOptionsSnapshot<DbSettings> optDbSettings,
    IOptionsSnapshot<SmtpSettings> optSmtpSettings
    )
  {
    this.optDbSettings = optDbSettings;
    this.optSmtpSettings = optSmtpSettings;
  }
  public void Test()
  {
    var db = optDbSettings.Value;
    Console.WriteLine($"数据库:{db.DbType},{db.ConnectionString}");
    var smtp = optSmtpSettings.Value;
    Console.WriteLine($"Smtp:{smtp.Server},{smtp.UserName},{smtp.Password}");
  }
}

6.打开 Program.cs,编写读取配置代码(重点看注释

// 1. 引入依赖注入、配置等命名空间
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
// 2. 读取配置文件
ConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);   
IConfigurationRoot config = configBuilder.Build();
// 3. 创建依赖注入容器
ServiceCollection services = new ServiceCollection();
// 4.1 选项方式注入配置服务
services.AddOptions()
  .Configure<DbSettings>(e => config.GetSection("DB").Bind(e))
  .Configure<SmtpSettings>(e => config.GetSection("Smtp").Bind(e));
// 4.2 注入读取配置的服务
services.AddTransient<Demo>();
// 5. 使用
using (var sp = services.BuildServiceProvider())
{
  // 建立了一个无限循环,方便修改配置文件反复测试
  while (true)
  {
    using (var scope = sp.CreateScope())
    {
      var spScope = scope.ServiceProvider;
      var demo = spScope.GetRequiredService<Demo>();
      demo.Test();
    }
    Console.WriteLine("可以改配置啦");
    Console.ReadKey();
  }
}

总结

  1. 总的来说,使用选项方式读取配置内容可以提高代码的可读性、维护性和灵活性,使用选项方式读取配置是 .NET Core 中推荐的方式,因为它不仅和依赖注入机制结合得更好,而且它可以实现配置修改后自动刷新,所以使用起来更方便
  2. 除了从 Json 文件读取配置,还可以从命令行、环境变量等不同的源读取
  3. .NET Core 中的配置系统支持 “可覆盖的配置”,也就是我们可以向 ConfigurationBuilder 中注册多个配置提供程序,后添加的配置提供程序可以覆盖先添加的配置提供程序

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。

都看到这了,求个点赞、关注、在看三连呗,感谢支持。


相关文章
|
3月前
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
|
3月前
|
开发框架 NoSQL .NET
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
|
3月前
|
开发框架 前端开发 JavaScript
前后端分离,Asp.net core webapi 如何配置跨域
前后端分离,Asp.net core webapi 如何配置跨域
|
3月前
.Net Core NLog 配置
.Net Core NLog 配置
32 0
|
6月前
|
开发框架 JSON .NET
.Net4.0 Web.config 配置实践
.Net4.0 Web.config 配置实践
|
6月前
|
IDE 前端开发 JavaScript
【C#】C# 开发环境配置(Rider 一个.NET 跨平台集成开发环境)
【1月更文挑战第26天】【C#】C# 开发环境配置(Rider 一个.NET 跨平台集成开发环境)
|
6月前
|
开发框架 .NET PHP
Web Deploy配置并使用Visual Studio进行.NET Web项目发布部署
Web Deploy配置并使用Visual Studio进行.NET Web项目发布部署
115 1
|
6月前
|
XML API 数据库
七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置
七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置
129 0
|
6月前
|
JSON JavaScript 前端开发
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
41 7