1.配置读取
1.1 依赖
json文件的 Microsoft.Extensions.Configuration.Json
1.2 使用
(1) 创建 JSON 配置文件
假设有一个 appsettings.json 文件:
{
"AppSettings": {
"Title": "My Application",
"Version": "1.0.0",
"MaxItems": 100
},
"ConnectionStrings": {
"Default": "Server=myServer;Database=myDB;User=myUser;Password=myPassword;"
}
}
(2) 读取配置
using Microsoft.Extensions.Configuration;
using System;
class Program
{
static void Main()
{
// 创建配置构建器
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory()) // 设置基础路径
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) // 添加 JSON 文件
.AddJsonFile("appsettings.product.json", optional: false, reloadOnChange: true) // 后添加的优先级更高
.Build();
// 读取配置值
string title = configuration["AppSettings:Title"];
string version = configuration["AppSettings:Version"];
string connectionString = configuration["ConnectionStrings:Default"];
Console.WriteLine($"Title: {title}");
Console.WriteLine($"Version: {version}");
Console.WriteLine($"Connection String: {connectionString}");
// 读取数值配置
int maxItems = configuration.GetValue<int>("AppSettings:MaxItems");
Console.WriteLine($"Max Items: {maxItems}");
}
}
1.3 结构
2. 配置绑定
2.1 依赖
Microsoft.Extensions.Configuration.Binder
2.2 使用
假设有以下 JSON 配置:
{
"AppSettings": {
"Name": "MyApp",
"Version": "1.0.0",
"MaxUsers": 100
}
}
public class AppSettings
{
public string Name { get; set; }
public string Version { get; set; }
public int MaxUsers { get; set; }
}
// 绑定配置
var appSettings = new AppSettings();
configuration.GetSection("AppSettings").Bind(appSettings);
Console.WriteLine($"App: {appSettings.Name}, Version: {appSettings.Version}");
appSettings = configuration.GetSection("AppSettings").Get<AppSettings>();
3.选项模型 + 依赖注入
3.1 依赖
Microsoft.Extensions.Options.ConfigurationExtensions
3.2 使用
public static void Main(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
var serviceProvider = new ServiceCollection()
.AddOptions()
.Configure<AppOptions>(configuration) //匿名对象
.Configure<AppOptions>("name1", configuration) //具名对象
.Configure<AppOptions>("name2", configuration)
.BuildServiceProvider();
AppOptions unName = serviceProvider.GetRequiredService<IOptions<AppOptions>>().Value;
IOptionsSnapshot<AppOptions> namedOpetions = serviceProvider.GetRequiredService<IOptionsSnapshot<AppOptions>>();
AppOptions name1 = namedOpetions.Get("name1");
AppOptions name2 = namedOpetions.Get("name2");
}
3.3 结构
4. ASP.NET Core中使用
// Program.cs 或 Startup.cs
var builder = WebApplication.CreateBuilder(args);
// 绑定配置到选项
builder.Services.Configure<AppOptions>(
builder.Configuration.GetSection(AppOptions.SectionName));
public class HomeController : Controller
{
private readonly AppOptions _options;
public HomeController(IOptions<AppOptions> options)
{
_options = options.Value;
}
public IActionResult Index()
{
ViewData["AppName"] = _options.Name;
return View();
}
}