SparkyTools.XmlConfig 1.1.1

Makes it easy to load a strongly-typed object (or IList of objects) from a custom web.config or app.config file section without having to write a custom IConfigurationSectionHandler implementation.

Install-Package SparkyTools.XmlConfig -Version 1.1.1
dotnet add package SparkyTools.XmlConfig --version 1.1.1
<PackageReference Include="SparkyTools.XmlConfig" Version="1.1.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SparkyTools.XmlConfig --version 1.1.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

see also:


ConfigurationSectionDeserializer / ConfigurationSectionListDeserializer

These classes makes it easy to load a strongly-typed object (or IList of objects) from a custom web.config or app.config file section without having to write a custom IConfigurationSectionHandler implementation.

In the .config file, register each custom section with a type of "SparkyTools.XmlConfig.ConfigurationSectionDeserializer" or
"SparkyTools.XmlConfig.ConfigurationSectionListDeserializer":

<configuration>
  <configSections>
    <section name="Foo" type="SparkyTools.XmlConfig.ConfigurationSectionDeserializer, SparkyTools.XmlConfig" />
    <section name="FooList" type="SparkyTools.XmlConfig.ConfigurationSectionListDeserializer, SparkyTools.XmlConfig" />
  </configSections>

In each registered custom section, specify the object type via the type attribute. Here's an single instance section:

  <Foo type="FooNamespace.Foo, FooAssemblyName">
    <Bar>bar</Bar>
    <Baz>123.45</Baz>
  </Foo>

...and a "list" section: (the type is the instance type, not "IList..."):

  <FooList type="FooNamespace.Bar, FooAssemblyName">
      <Foo>
        <Bar>bar1</Bar>
        <Baz>111.11</Baz>
      </Foo>
      <Foo>
        <Bar>bar2</Bar>
        <Baz>222.22</Baz>
      </Foo>
  </FooList>

To read from your custom .config section, just call the Load method, specifying the object type and the .config section name:

    Foo foo = ConfigurationSectionDeserializer.Load<Foo>("Foo");
    IList<Foo> fooList = ConfigurationSectionListDeserializer.Load<Foo>("FooList");

DependencyProvider methods

These methods create DependencyProviders for use with apps that use app.config / web.config files:

  • ConfigurationSectionDeserializer.DependencyProvider / ConfigurationSectionListDeserializer.DependencyProvider
    create DependencyProviders that load data from a .config file section:
    using SparkyTools.DependencyProvider;
    
    public class Foo
    {
        public Foo(
            DependencyProvider<Bar> barProvider, 
            DependencyProvider<IList<Baz>> bazProvider)
        {
        }
    }
    
    using SparkyTools.XmlConfig;
    . . .
        var foo = new Foo(
            ConfigurationSectionDeserializer.DependencyProvider<Bar>("Bar"),
            ConfigurationSectionListDeserializer.DependencyProvider<Baz>("BazList"));
    
  • AppSettings.DependencyProvider creates a DependencyProvider that wraps ConfigurationManager.AppSettings:
    using SparkyTools.DependencyProvider;
    
    public class Qux
    {
        private readonly Func<string, string> _getAppSetting;
    
        public Qux(DependencyProvider<Func<string, string> appSettingsProvider)
        {
            _getAppSetting = appSettingsProvider.GetValue();
        }
    
        public void MethodUsingAppSettings()
        {
            string valueFromAppSettings = _getAppSetting("key);
        }
    }
    
    using SparkyTools.XmlConfig;
    ...
        var qux = new Qux(AppSettings.DependencyProvider());
    

see also:


ConfigurationSectionDeserializer / ConfigurationSectionListDeserializer

These classes makes it easy to load a strongly-typed object (or IList of objects) from a custom web.config or app.config file section without having to write a custom IConfigurationSectionHandler implementation.

In the .config file, register each custom section with a type of "SparkyTools.XmlConfig.ConfigurationSectionDeserializer" or
"SparkyTools.XmlConfig.ConfigurationSectionListDeserializer":

<configuration>
  <configSections>
    <section name="Foo" type="SparkyTools.XmlConfig.ConfigurationSectionDeserializer, SparkyTools.XmlConfig" />
    <section name="FooList" type="SparkyTools.XmlConfig.ConfigurationSectionListDeserializer, SparkyTools.XmlConfig" />
  </configSections>

In each registered custom section, specify the object type via the type attribute. Here's an single instance section:

  <Foo type="FooNamespace.Foo, FooAssemblyName">
    <Bar>bar</Bar>
    <Baz>123.45</Baz>
  </Foo>

...and a "list" section: (the type is the instance type, not "IList..."):

  <FooList type="FooNamespace.Bar, FooAssemblyName">
      <Foo>
        <Bar>bar1</Bar>
        <Baz>111.11</Baz>
      </Foo>
      <Foo>
        <Bar>bar2</Bar>
        <Baz>222.22</Baz>
      </Foo>
  </FooList>

To read from your custom .config section, just call the Load method, specifying the object type and the .config section name:

    Foo foo = ConfigurationSectionDeserializer.Load<Foo>("Foo");
    IList<Foo> fooList = ConfigurationSectionListDeserializer.Load<Foo>("FooList");

DependencyProvider methods

These methods create DependencyProviders for use with apps that use app.config / web.config files:

  • ConfigurationSectionDeserializer.DependencyProvider / ConfigurationSectionListDeserializer.DependencyProvider
    create DependencyProviders that load data from a .config file section:
    using SparkyTools.DependencyProvider;
    
    public class Foo
    {
        public Foo(
            DependencyProvider<Bar> barProvider, 
            DependencyProvider<IList<Baz>> bazProvider)
        {
        }
    }
    
    using SparkyTools.XmlConfig;
    . . .
        var foo = new Foo(
            ConfigurationSectionDeserializer.DependencyProvider<Bar>("Bar"),
            ConfigurationSectionListDeserializer.DependencyProvider<Baz>("BazList"));
    
  • AppSettings.DependencyProvider creates a DependencyProvider that wraps ConfigurationManager.AppSettings:
    using SparkyTools.DependencyProvider;
    
    public class Qux
    {
        private readonly Func<string, string> _getAppSetting;
    
        public Qux(DependencyProvider<Func<string, string> appSettingsProvider)
        {
            _getAppSetting = appSettingsProvider.GetValue();
        }
    
        public void MethodUsingAppSettings()
        {
            string valueFromAppSettings = _getAppSetting("key);
        }
    }
    
    using SparkyTools.XmlConfig;
    ...
        var qux = new Qux(AppSettings.DependencyProvider());
    

Release Notes

Added AppSettings.DependencyProvider()

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated
1.1.1 223 5/28/2018
1.1.0 260 2/21/2018
1.0.2 204 2/21/2018
1.0.1 297 2/20/2018
1.0.0 196 2/20/2018