title: Are C# 9 'init' properties safe to use for configuration binding (IOptions)?
body: <p>I noticed that the new <code>init</code> properties in C# version 9 seem to bind when used in strongly typed option classes (Options Pattern).</p>
  <p>In other words, this works:</p>
  <pre class="lang-csharp prettyprint-override"><code>    class SomeSettings
      {
          public string FirstSetting { get; init; }
          public bool SecondSetting { get; init; }
      }
  
      ...
  
      configuration.GetSection(nameof(SomeSettings)).Get&lt;SomeSettings&gt;();
  </code></pre>
  <p><strong>But are there any potential 'gotchas' or limitations we should be aware of?</strong> (When used either with direct binding, or injected as <code>IOptions&lt;&gt;</code> with <code>Configure()</code>.)</p>
  <p>Admittedly, my motivation is that I'm thinking about binding and registering these instances directly at configuration time as singletons, without the pesky <code>IOptions&lt;&gt;</code> wrapper. The only reason I haven't done so far was the mutability of the properties, but <code>init</code> seems to solve that.</p>