<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>appsettings | no dogma blog</title><link>https://nodogmablog.bryanhogan.net/tag/appsettings/</link><atom:link href="https://nodogmablog.bryanhogan.net/tag/appsettings/index.xml" rel="self" type="application/rss+xml"/><description>appsettings</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Fri, 09 Oct 2026 00:00:00 +0000</lastBuildDate><image><url>https://nodogmablog.bryanhogan.net/media/icon_hu9c23d68d4e9f1f9acfa8237e5c2ea674_3344_512x512_fill_lanczos_center_3.png</url><title>appsettings</title><link>https://nodogmablog.bryanhogan.net/tag/appsettings/</link></image><item><title>Reloading appsettings.json Without Restarting the Application</title><link>https://nodogmablog.bryanhogan.net/2026/10/reloading-appsettings-json-without-restarting-the-application/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://nodogmablog.bryanhogan.net/2026/10/reloading-appsettings-json-without-restarting-the-application/</guid><description>&lt;p>&lt;em>Download &lt;a href="media/ReloadConfigOnChange.zip">full source code.&lt;/a>&lt;/em>&lt;/p>
&lt;p>I was chatting with a friend about reloading configuration within a .NET application. He was manually running a background worker that read from appsettings.json every few minutes. He was unaware that .NET has built-in support for reloading configuration without restarting the application.&lt;/p>
&lt;p>Here is a simple example of how to do it with a Web API application, but the same principle applies to any .NET application.&lt;/p>
&lt;p>First, here is the appsettings.json with the section named &amp;ldquo;WebApiSettings&amp;rdquo; -&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5a2">&amp;#34;WebApiSettings&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5a2">&amp;#34;StringSetting1&amp;#34;&lt;/span>: &lt;span style="color:#5a2">&amp;#34;Hello World!&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5a2">&amp;#34;IntSetting2&amp;#34;&lt;/span>: &lt;span style="color:#3af">100&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5a2">&amp;#34;BoolSetting3&amp;#34;&lt;/span>: &lt;span style="color:#00f">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>Now I need a matching C# class to hold the settings -&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1&lt;/span>&lt;span>&lt;span style="color:#00f">public&lt;/span> &lt;span style="color:#00f">class&lt;/span> &lt;span style="color:#000">WebApiSettings&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2&lt;/span>&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3&lt;/span>&lt;span> &lt;span style="color:#00f">public&lt;/span> &lt;span style="color:#00f">string?&lt;/span> &lt;span style="color:#000">StringSetting1&lt;/span> { &lt;span style="color:#00f">get&lt;/span>; &lt;span style="color:#00f">set&lt;/span>; }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4&lt;/span>&lt;span> &lt;span style="color:#00f">public&lt;/span> &lt;span style="color:#00f">int&lt;/span> &lt;span style="color:#000">IntSetting2&lt;/span> { &lt;span style="color:#00f">get&lt;/span>; &lt;span style="color:#00f">set&lt;/span>; }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5&lt;/span>&lt;span> &lt;span style="color:#00f">public&lt;/span> &lt;span style="color:#00f">bool&lt;/span> &lt;span style="color:#000">BoolSetting3&lt;/span> { &lt;span style="color:#00f">get&lt;/span>; &lt;span style="color:#00f">set&lt;/span>; }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6&lt;/span>&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>And it&amp;rsquo;s all brought together in the Program.cs file -&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1&lt;/span>&lt;span>&lt;span style="color:#00f">using&lt;/span> &lt;span style="color:#000">Microsoft.Extensions.Options&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3&lt;/span>&lt;span>&lt;span style="color:#00f">var&lt;/span> &lt;span style="color:#000">builder&lt;/span> = &lt;span style="color:#000">WebApplication&lt;/span>.&lt;span style="color:#000">CreateBuilder&lt;/span>(&lt;span style="color:#000">args&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5&lt;/span>&lt;span>&lt;span style="color:#000">builder&lt;/span>.&lt;span style="color:#000">Configuration&lt;/span>.&lt;span style="color:#000">AddJsonFile&lt;/span>(&lt;span style="color:#5a2">&amp;#34;appsettings.json&amp;#34;&lt;/span>, &lt;span style="color:#000">optional&lt;/span>: &lt;span style="color:#00f">false&lt;/span>, &lt;span style="color:#000">reloadOnChange&lt;/span>: &lt;span style="color:#00f">true&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7&lt;/span>&lt;span>&lt;span style="color:#000">builder&lt;/span>.&lt;span style="color:#000">Services&lt;/span>.&lt;span style="color:#000">Configure&lt;/span>&amp;lt;&lt;span style="color:#000">WebApiSettings&lt;/span>&amp;gt;(&lt;span style="color:#000">builder&lt;/span>.&lt;span style="color:#000">Configuration&lt;/span>.&lt;span style="color:#000">GetSection&lt;/span>(&lt;span style="color:#5a2">&amp;#34;WebApiSettings&amp;#34;&lt;/span>));
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9&lt;/span>&lt;span>&lt;span style="color:#00f">var&lt;/span> &lt;span style="color:#000">app&lt;/span> = &lt;span style="color:#000">builder&lt;/span>.&lt;span style="color:#000">Build&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11&lt;/span>&lt;span>&lt;span style="color:#000">app&lt;/span>.&lt;span style="color:#000">MapGet&lt;/span>(&lt;span style="color:#5a2">&amp;#34;/&amp;#34;&lt;/span>, (&lt;span style="color:#000">IOptionsMonitor&lt;/span>&amp;lt;&lt;span style="color:#000">WebApiSettings&lt;/span>&amp;gt; &lt;span style="color:#000">optionsMonitor&lt;/span>) =&amp;gt; &lt;span style="color:#5a2">$@&amp;#34;Current settings -
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12&lt;/span>&lt;span>&lt;span style="color:#5a2">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13&lt;/span>&lt;span>&lt;span style="color:#5a2">StringSetting1: {optionsMonitor.CurrentValue.StringSetting1}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14&lt;/span>&lt;span>&lt;span style="color:#5a2">IntSetting2: {optionsMonitor.CurrentValue.IntSetting2}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15&lt;/span>&lt;span>&lt;span style="color:#5a2">BoolSetting3: {optionsMonitor.CurrentValue.BoolSetting3}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16&lt;/span>&lt;span>&lt;span style="color:#5a2">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17&lt;/span>&lt;span>&lt;span style="color:#5a2">Change the settings in appsettings.json, save the file, and reload this page.&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19&lt;/span>&lt;span>&lt;span style="color:#000">app&lt;/span>.&lt;span style="color:#000">Run&lt;/span>();&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>Run the application, open the browser to localhost:5000, and you will see the current settings. Change the values in appsettings.json, save the file, and reload the page in the browser. The new values will be displayed without restarting the application.&lt;/p>
&lt;p>That&amp;rsquo;s it!&lt;/p>
&lt;p>&lt;em>Download &lt;a href="media/ReloadConfigOnChange.zip">full source code.&lt;/a>&lt;/em>&lt;/p></description></item></channel></rss>