了解 C# 设置标志枚举:分配标志
配置管理是用 C# 构建可扩展、可维护应用程序的一个重要方面。 处理配置设置的最有效方法之一是使用 Options 模式。 在他的视频 The Options Pattern in C# in 10 Minutes or Less 中,Tim Corey 对这种模式以及如何高效实现这种模式进行了简明而深刻的解释。 在本文中,我们将通过 Tim 视频中的解释和演示来探讨选项模式。
简介
Tim 首先介绍了 Options 模式,这是一种强大而简单的方法,可以从配置文件中检索信息并将其注入依赖注入 (DI)。 他强调了这种模式的几个优点,例如
- 管理运行时值变化的能力。
- 内置数据验证支持。
- 兼容各种 C# 项目类型,包括 Blazor 应用程序。
Tim 强调,虽然他通常会提供深入的技术培训,但本视频旨在作为实施选项模式的快速入门指南。
项目设置
Tim 首先打开 Visual Studio,并打开一个 Blazor Web 应用程序(仅限服务器端渲染)。 他已经做了一些修改,以加快演示速度。 关键设置包括
- 创建一个包含三个键值对的CloudInfo部分的
appsettings.json文件。 - 使用一个普通旧CLR对象(POCO)模型,称为
CloudInfoOptions,其映射到这些配置值。
配置文件
appsettings.json文件包含以下部分:
{
"CloudInfo": {
"Storage": "Azure Storage",
"Website": "Azure Static Web Apps",
"API": "Azure Web App"
}
}Tim澄清说,虽然他在使用appsettings.json,但配置值也可以来自:
appsettings.Development.jsonsecrets.json- 环境变量
将配置绑定到选项
现在,Tim解释如何绑定配置值到CloudInfoOptions类并将其注入DI中。
在 Program.cs 中注册选项
在builder.Services内添加了以下行:
builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));这将CloudInfoOptions类。 Tim 指出,这一步骤可确保依赖注入中的值可用。
在 Razor 组件中注入选项
Tim移动到首页组件(Index.razor)并修改它以动态显示配置值。
他将IOptions接口注入到组件中:
@inject IOptions<CloudInfoOptions> CloudInfoOptions为了检索实际值,他在OnInitialized内部分配它们:
protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}Tim解释说,IOptions<t>提供了配置值的单例实例,这意味着它在应用程序的生命周期内保持不变。 应用程序运行时,配置值将正确显示在页面上。
探索不同的选项界面
然后,Tim 介绍了使用选项模式的三种不同方法:
1.单例选项
默认情况下,IOptions<t>提供了一个单例实例。 Tim 演示了如果在应用程序运行时更新配置文件,除非重新启动应用程序,否则更改不会反映。
2. 作用域选项 - 使用IOptionsSnapshot<t>
为了启用按请求更新,Tim 将注入修改为:按请求更新:
@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptions这样可以确保每个新的 HTTP 请求都能获得新的配置值。 Tim通过修改appsettings.json,刷新页面,显示更新后的值立即出现来测试这一点。
他解释说,IOptionsSnapshot<t>对于需要反映更改而不重启应用程序,但无需实时监控的场景很有用。
3. 监控更改 - 使用IOptionsMonitor<t>
最后,Tim介绍了IOptionsMonitor<t>,它可以实现实时更改检测。 他将注入内容更新为
@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptions与每请求更新的IOptionsMonitor<t>可以在配置值更改时触发事件。 当您需要对配置变化做出动态响应时,这一点尤其有用。
Tim指出IOptionsMonitor<t>由单例支持,但可以在底层配置文件更改时动态刷新值。
结论
在 视频的最后,Tim 总结了三种方法之间的主要区别:
| 界面 | 终生 | 变更更新 |
|---|---|---|
IOptions<t> | 单子 | 否 |
IOptionsSnapshot<t> | 范围 | 按要求 |
IOptionsMonitor<t> | 单子 | 是 |
他强调,虽然选项模式简化了配置管理,但了解这些不同的变体有助于根据项目要求选择正确的方法。
按照 Tim 的方法,开发人员可以有效地管理应用程序设置,确保顺利进行依赖注入,并有效地处理运行时配置更改。 为了更好地理解,请观看完整的视频,并访问他的频道,了解更多关于 C# 的精辟视频。

