学习笔记

架构班学习


使用 Options 读取配置文件的数据

<hr /> <h2>使用 Options 读取配置文件的数据</h2> <p>本文将介绍如何通过 <code>Options</code> 模式读取配置文件中的数据,并且使用依赖注入(DI)模式完成数据的初始化和传递。</p> <h3>步骤一:封装实体类</h3> <p>首先,我们定义一个实体类,用于映射配置文件中的数据结构。</p> <pre><code class="language-csharp">public class MySettings { public string Setting1 { get; set; } public int Setting2 { get; set; } }</code></pre> <h3>步骤二:向 IOC 容器注册配置数据</h3> <p>接下来,我们需要将配置文件中的数据注册到 IOC 容器中。在 <code>Program.cs</code> 文件中,我们通过 <code>builder.Services.Configure&amp;lt;T&amp;gt;</code> 方法注册配置数据。</p> <pre><code class="language-csharp">var builder = WebApplication.CreateBuilder(args); // 加载配置文件中的数据并注册到 IOC 容器中 builder.Services.Configure&amp;lt;MySettings&amp;gt;(&amp;quot;MySettingsSection&amp;quot;, builder.Configuration.GetSection(&amp;quot;MySettingsSection&amp;quot;)); var app = builder.Build();</code></pre> <p>假设我们的 <code>appsettings.json</code> 配置文件如下:</p> <pre><code class="language-json">{ &amp;quot;MySettingsSection&amp;quot;: { &amp;quot;Setting1&amp;quot;: &amp;quot;Value1&amp;quot;, &amp;quot;Setting2&amp;quot;: 123 } }</code></pre> <h3>步骤三:在 DI 容器中使用配置</h3> <p>我们可以通过三种方式在 DI 容器中使用配置数据:<code>IOptions</code>(单例)、<code>IOptionsMonitor</code>(瞬时)和 <code>IOptionsSnapshot</code>(作用域)。</p> <h4>1. 使用 IOptions</h4> <p><code>IOptions</code> 提供简单的读访问,不支持实时更新。</p> <pre><code class="language-csharp">public class MyService { private readonly MySettings _settings; public MyService(IOptions&amp;lt;MySettings&amp;gt; options) { _settings = options.Value; } public void DisplaySettings() { Console.WriteLine($&amp;quot;Setting1: {_settings.Setting1}&amp;quot;); Console.WriteLine($&amp;quot;Setting2: {_settings.Setting2}&amp;quot;); } }</code></pre> <h4>2. 使用 IOptionsMonitor</h4> <p><code>IOptionsMonitor</code> 支持实时更新配置数据。</p> <pre><code class="language-csharp">public class MyService { private readonly IOptionsMonitor&amp;lt;MySettings&amp;gt; _optionsMonitor; public MyService(IOptionsMonitor&amp;lt;MySettings&amp;gt; optionsMonitor) { _optionsMonitor = optionsMonitor; } public void DisplaySettings() { var settings = _optionsMonitor.CurrentValue; Console.WriteLine($&amp;quot;Setting1: {settings.Setting1}&amp;quot;); Console.WriteLine($&amp;quot;Setting2: {settings.Setting2}&amp;quot;); } }</code></pre> <h4>3. 使用 IOptionsSnapshot</h4> <p><code>IOptionsSnapshot</code> 在作用域内提供快照数据,通常用于请求范围的服务中。</p> <pre><code class="language-csharp">public class MyService { private readonly MySettings _settings; public MyService(IOptionsSnapshot&amp;lt;MySettings&amp;gt; optionsSnapshot) { _settings = optionsSnapshot.Value; } public void DisplaySettings() { Console.WriteLine($&amp;quot;Setting1: {_settings.Setting1}&amp;quot;); Console.WriteLine($&amp;quot;Setting2: {_settings.Setting2}&amp;quot;); } }</code></pre> <h3>总结</h3> <p>通过上述步骤,我们详细介绍了如何使用 <code>Options</code> 模式读取配置文件中的数据,并在依赖注入(DI)容器中使用配置数据的三种方法。这种方式不仅可以有效地管理应用配置,也支持实时更新和作用域内的数据访问。</p>

页面列表

ITEM_HTML