.NET Core Options
.NET Core 中,使用 Options
模式来读取配置信息。Options
模式是配置绑定的一个强类型方式,通过 IOptions<T>
, IOptionsSnapshot<T>
和 IOptionsMonitor<T>
三种不同的方式来管理应用程序的配置数据。
1. 使用 IOptions<T>
IOptions<T>
是最简单的选项,用于读取配置数据。它在应用程序启动时会读取配置,并且在整个应用程序生命周期中保持不变。
示例代码:
// 1. 定义配置类
public class MySettings
{
public string Setting1 { get; set; }
public string Setting2 { get; set; }
}
// 2. 在 appsettings.json 中配置
/*
{
"MySettings": {
"Setting1": "Value1",
"Setting2": "Value2"
}
}
*/
// 3. 在 Startup.cs 或 Program.cs 中绑定配置
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MySettings>(Configuration.GetSection("MySettings"));
// 其他服务
}
// 4. 在需要的地方使用 IOptions<T>
public class MyService
{
private readonly MySettings _settings;
public MyService(IOptions<MySettings> options)
{
_settings = options.Value;
}
public void PrintSettings()
{
Console.WriteLine(_settings.Setting1);
Console.WriteLine(_settings.Setting2);
}
}
2. 使用 IOptionsSnapshot<T>
IOptionsSnapshot<T>
适用于 Scoped 生命周期的服务,允许在每次请求期间重新获取配置值。适用于 Web 应用中配置动态变化的场景。
示例代码:
public class MyService
{
private readonly MySettings _settings;
public MyService(IOptionsSnapshot<MySettings> optionsSnapshot)
{
_settings = optionsSnapshot.Value;
}
public void PrintSettings()
{
Console.WriteLine(_settings.Setting1);
Console.WriteLine(_settings.Setting2);
}
}
特点:
- 在请求生命周期内,配置不会更改。
- 每个新请求会重新从配置源中读取值。
3. 使用 IOptionsMonitor<T>
IOptionsMonitor<T>
适用于需要在应用程序运行时动态响应配置变化的场景。可以在配置变化时自动触发事件。
示例代码:
public class MyService
{
private readonly IOptionsMonitor<MySettings> _optionsMonitor;
public MyService(IOptionsMonitor<MySettings> optionsMonitor)
{
_optionsMonitor = optionsMonitor;
_optionsMonitor.OnChange(settings =>
{
Console.WriteLine("配置已更新");
Console.WriteLine(settings.Setting1);
Console.WriteLine(settings.Setting2);
});
}
public void PrintSettings()
{
var settings = _optionsMonitor.CurrentValue;
Console.WriteLine(settings.Setting1);
Console.WriteLine(settings.Setting2);
}
}
特点:
- 能够监听配置变化并在配置更新时自动执行回调。
- 非常适合响应实时配置变化。
4. 结合 Options.Validation
进行配置验证
可以为 Options
配置添加验证,以确保配置在绑定时符合业务规则。
示例代码:
public class MySettings
{
public string Setting1 { get; set; }
public string Setting2 { get; set; }
}
// 添加验证逻辑
services.AddOptions<MySettings>()
.Bind(Configuration.GetSection("MySettings"))
.Validate(settings => !string.IsNullOrEmpty(settings.Setting1), "Setting1 cannot be empty");
在 .NET Core 中,使用 Options
模式有以下几种方式来读取和管理配置信息:
IOptions<T>
:适用于单例读取配置,配置在应用程序生命周期内不会更改。IOptionsSnapshot<T>
:用于按需重新加载配置,通常用于 Web 请求场景。IOptionsMonitor<T>
:适用于需要动态更新和监听配置变化的场景。
根据应用需求选择不同的方式来管理配置数据。