首页 > 其他分享 >.NET Core Options

.NET Core Options

时间:2024-10-11 17:12:03浏览次数:8  
标签:Core Console Setting1 settings 配置 Options WriteLine NET public

.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>:适用于需要动态更新和监听配置变化的场景。

根据应用需求选择不同的方式来管理配置数据。

标签:Core,Console,Setting1,settings,配置,Options,WriteLine,NET,public
From: https://www.cnblogs.com/JosenEarth/p/18458896

相关文章

  • NetCore 阿里云表格存储插入数据实例
    十年河东,十年河西,莫欺少年穷学无止境,精益求精帮助类:publicclassOtsHelper{publicstaticstringEndpoint="https://xxx.cn-shanghai.ots.aliyuncs.com";publicstaticstringInstanceName="xxx";///<summary>//......
  • VS Code安装C#开发工具包并编写ASP.NET Core Web应用
    前言    前段时间微软发布了适用于VSCode的C#开发工具包(注意目前该包还属于预发布状态但是可以正常使用),因为之前看过网上的一些使用VSCode搭建.NETCore环境的教程看着还挺复杂的就一直没有尝试使用VSCode来编写.NETCore。不过听说C#开发工具包提供了一系列功能和扩展,从而......
  • Visual Studio Code调试和发布ASP.NET Core Web应用
    前言上一篇文章主要讲了VisualStudioCode安装C#开发工具包并编写ASP.NETCoreWeb应用有兴趣的同学可以去看看,今天咱们主要是要讲讲如何在VSCode中调试和发布ASP.NETCoreWeb应用。VisualStudioCode安装C#开发工具包并编写ASP.NETCoreWeb应用配置launch.json文件launch.jso......
  • 一张图带你了解.NET终结(Finalize)流程
    简介"终结"一般被分为确定性终结(显示清除)与非确定性终结(隐式清除)确定性终结主要提供给开发人员一个显式清理的方法,比如try-finally,using。非确定性终结主要提供一个注册的入口,只知道会执行,但不清楚什么时候执行。比如IDisposable,析构函数。为什么需要终结机制?首先......
  • Pixnet台湾最火社交网站
    Pixnet是一个台湾的网络社群服务平台。它由曾皇霖与刘昊恩在2003年创立,目前由城邦媒体控股集团的子公司优像数位媒体经营。该网站主要提供以下服务:1.**部落格(博客)**:用户可以在上面发表个人的文字内容、观点、经历分享等,类似于个人的网络日志空间,用户可以对文章进行编辑、排版等......
  • EfficientNet
    资料:细品EfficientNet-知乎(zhihu.com)【论文解读】一文看懂EfficientnetB0~B7模型所有细节-知乎(zhihu.com)mmlab之调用mmpretrain预训练模型_mmpretrain下游-CSDN博客在mmcv中使用EfficientNet的config:1backbone=dict(2type='mmdet.EfficientNe......
  • crit: Microsoft.AspNetCore.Server.Kestrel[0] Unable to start Kestrel. Interop+Cr
    域名证书没有放在指定的位置错误信息crit:Microsoft.AspNetCore.Server.Kestrel[0]UnabletostartKestrel.Interop+Crypto+OpenSslCryptographicException:error:2006D080:BIOroutines:BIO_new_file:nosuchfileatInterop.Crypto.CheckValidOpenSslHandle(Saf......
  • visual studio 2022 安装net旧版本(net framework4.0和4.5)
    原文链接:visualstudio2022安装net旧版本(netframework4.0和4.5)_vs20224.0框架问题:VisualStudio2022安装程序中单个组件中没有.netframework4.0或者.netframework4.5的问题,NETSDK下载 Download.NETSDKsforVisualStudio下载没有4.5和4.0的开发包其他Net版本直......
  • YoloDotNet v2.1:实时物体检测的利器oX
    项目介绍YoloDotNetv2.1是一个基于C#和.NET8的实时物体检测框架,专为图像和视频中的物体检测而设计。它集成了Yolov8~Yolov11模型,通过ML.NET和ONNX运行时实现高效的物体检测,并支持GPU加速(使用CUDA)。YoloDotNet不仅支持传统的物体检测,还涵盖了分类、OBB检测、......
  • telnet操作中兴设备
    importtelnetlib,re,os,threading,multiprocessing,datetimeimportpandasaspdfrompandaspd.set_option('display.width',None)pd.options.display.max_columns=Nonepd.options.display.max_rows=Nonepath=os.getcwd()deftelnet(host,port......