Skip to content

Mapping collections

edpollitt edited this page Jul 28, 2015 · 7 revisions

Mapping enumerables, lists, collections, arrays...

<configuration>
  <configSections>
    <section name="collectionsConfiguration" 
             type="Nerdle.AutoConfig.Section, Nerdle.AutoConfig" />
  </configSections>
  <collectionsConfiguration>
    <primes>
      <prime>2</prime>
      <prime>3</prime>
      <prime>5</prime>
      <prime>7</prime>
    </primes>
    <colors>
      <color>Red</color>
      <color>Green</color>
    </colors>
    <unicorns>
    </unicorns>
    <eggs>
      <style>fried</style>
      <style>scrambled</style>
      <style>poached</style>
    </eggs>    
  </collectionsConfiguration>
</configuration>
public interface ICollectionsConfiguration
{
    IEnumerable<long> Primes { get; }
    IList<ConsoleColor> Colors { get; }
    ICollection<string> Unicorns { get; }
    string[] Eggs { get; }
}
[Test]
public void Mapping_collections()
{
    var config = AutoConfig.Map<ICollectionsConfiguration>();
    config.Should().NotBeNull();
    config.Primes.Should().HaveCount(4);
    config.Primes.Should().ContainInOrder(2L, 3L, 5L, 7L);
    config.Colors.Should().HaveCount(2);
    config.Colors.Should().ContainInOrder(ConsoleColor.Red, ConsoleColor.G
    config.Unicorns.Should().BeEmpty();
    config.Eggs.Should().HaveCount(3);
    config.Eggs.Should().ContainInOrder("fried", "scrambled", "poached");
}

Mapping nested collections

<configuration>
  <configSections>
    <section name="nestedCollectionsConfiguration" 
             type="Nerdle.AutoConfig.Section, Nerdle.AutoConfig" />
  </configSections>
  <nestedCollectionsConfiguration>
    <numbers>
      <odds>
        <number>1</number>
        <number>3</number>
        <number>5</number>
      </odds>
      <evens>
        <number>2</number>
        <number>4</number>
      </evens>
    </numbers>
  </nestedCollectionsConfiguration>
</configuration>
public interface INestedCollectionsConfiguration
{
    IEnumerable<ICollection<int>> Numbers { get; }
}
[Test]
public void Mapping_nested_collections()
{
    var config = AutoConfig.Map<INestedCollectionsConfiguration>();
    config.Should().NotBeNull();
    config.Numbers.Should().HaveCount(2);
    config.Numbers.First().Should().ContainInOrder(1, 3, 5);
    config.Numbers.Last().Should().ContainInOrder(2, 4);
}

Clone this wiki locally