跳至页脚内容
Iron Academy Logo
学习 C#
学习 C#

其他类别

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

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文件。
  • 使用一个普通旧CLR对象(POCO)模型,称为CloudInfoOptions,其映射到这些配置值。

配置文件

appsettings.json文件包含以下部分:

{
  "CloudInfo": {
    "Storage": "Azure Storage",
    "Website": "Azure Static Web Apps",
    "API": "Azure Web App"
  }
}

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

  • appsettings.Development.json
  • secrets.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# 的精辟视频。

Hero Worlddot related to 了解 C# 设置标志枚举:分配标志
Hero Affiliate related to 了解 C# 设置标志枚举:分配标志

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我