IRONSOFTWAREHOME

了解 C# 设置标志枚举:分配标志

10 分钟或更短时间内掌握 C# 中的 Options 模式

Tim Corey

10 分 39 秒

配置管理是用 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"
  }
}
JSON

Tim澄清说,虽然他正在使用appsettings.json,这些配置值也可以来自:

  • appsettings.Development.json
  • secrets.json
  • 环境变量

将配置绑定到选项

现在,Tim解释如何将配置值绑定CloudInfoOptions类,并将其注入DI中。

在 Program.cs 中注册选项

builder.Services中添加了以下行:

builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));

这将CloudInfoOptions类。 Tim 指出,这一步骤可确保依赖注入中的值可用。

在 Razor 组件中注入选项

Tim转到主页组件(Index.razor),并修改它以动态显示配置值。

他将**IOptions接口**注入组件中:

@inject IOptions<CloudInfoOptions> CloudInfoOptions
Text

为了检索实际值,他在OnInitialized中分配了它们:

protected override void OnInitialized()
{
    CloudInfo = CloudInfoOptions.Value;
}

Tim解释说IOptions<t>提供了一个单例实例的配置值,这意味着在应用的生命周期内保持不变。 应用程序运行时,配置值将正确显示在页面上。

探索不同的选项界面

然后,Tim 介绍了使用选项模式的三种不同方法:

1.单例选项

默认情况下,IOptions<t>提供了一个单例实例。 Tim 演示了如果在应用程序运行时更新配置文件,除非重新启动应用程序,否则更改不会反映

2. 作用域选项 - 使用IOptionsSnapshot<t>

为了启用按请求更新,Tim 将注入修改为:按请求更新

@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptions
Text

这样可以确保每个新的 HTTP 请求都能获得新的配置值。 Tim通过修改appsettings.json测试此功能,刷新页面,并显示更新后的值现在立即出现。

他解释说IOptionsSnapshot<t>适用于需要在不重新启动应用的情况下反映更改的场景,但不需要实时监控。

3. 监控变化 - 使用IOptionsMonitor<t>

最后,Tim介绍了IOptionsMonitor<t>,它支持实时变化检测。 他将注入内容更新为

@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptions
Text

与每次请求更新的IOptionsMonitor<t>可以在配置值变化时触发事件。 当您需要对配置变化做出动态响应时,这一点尤其有用。

Tim指出,IOptionsMonitor<t>由一个单例支持,但当底层配置文件变化时可以动态刷新值。

结论

视频的最后,Tim 总结了三种方法之间的主要区别:

界面终生变更更新
IOptions<t>单子
IOptionsSnapshot<t>范围按要求
IOptionsMonitor<t>单子

他强调,虽然选项模式简化了配置管理,但了解这些不同的变体有助于根据项目要求选择正确的方法。

按照 Tim 的方法,开发人员可以有效地管理应用程序设置,确保顺利进行依赖注入,并有效地处理运行时配置更改。 为了更好地理解,请观看完整的视频,并访问他的频道,了解更多关于 C# 的精辟视频。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户