了解 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文件。 - 使用一个名为
CloudInfoOptions的普通CLR对象(POCO)模型,它映射到这些配置值。
配置文件
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# 的精辟视频。

