前言
在 .NET Core 中,可以使用选项模式(Options Pattern)来读取和管理应用程序的配置内容。
选项模式通过创建一个 POCO(Plain Old CLR Object)来表示配置选项,并将其注册到依赖注入容器中,方便地在应用程序中访问和使用配置内容,这种方式避免了硬编码和字符串操作,是一种类型安全的访问方式。
而且将配置内容集中管理在一个 POCO 类中,便于维护和修改,降低了配置信息分散的风险。
下面看看 .NET Core 是如何使用选项方式读取配置内容。
Step By Step 步骤
-
创建一个 .NET Core Console 项目
-
从 Nuget 安装以下包
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Binder
Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Options -
添加配置文件 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": "*" }
-
创建建对应配置项的两个模型类,即 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; } }
-
创建测试读取配置的 Demo 类(重点看注释)
using Microsoft.Extensions.Options;class Demo {// IOptionsSnapshot<T> 在配置改变后,可以不重新运行程序就读到新的值private readonly IOptionsSnapshot<DbSettings> optDbSettings;private readonly IOptionsSnapshot<SmtpSettings> optSmtpSettings;// 构造方法注入 IOptionsSnapshotpublic 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}");} }
-
打开 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();} }
总结
- 总的来说,使用选项方式读取配置内容可以提高代码的可读性、维护性和灵活性,使用选项方式读取配置是 .NET Core 中推荐的方式,因为它不仅和依赖注入机制结合得更好,而且它可以实现配置修改后自动刷新,所以使用起来更方便
- 除了从 Json 文件读取配置,还可以从命令行、环境变量等不同的源读取
- .NET Core 中的配置系统支持 “可覆盖的配置”,也就是我们可以向 ConfigurationBuilder 中注册多个配置提供程序,后添加的配置提供程序可以覆盖先添加的配置提供程序
我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。
都看到这了,求个点赞、关注、在看三连呗,感谢支持。