ASP.NET Core 配置

106 阅读1分钟

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();
    }
}