Skip to content

Mapping dictionaries

edpollitt edited this page Jul 27, 2015 · 4 revisions

Dictionaries are configured using a collection of key/value pairs

<configuration>
  <configSections>
    <section name="dictionaryConfiguration" 
             type="Nerdle.AutoConfig.Section, Nerdle.AutoConfig" />
  </configSections>
  <dictionaryConfiguration>
    <frenchWords>
      <word key="cat" value="chat" />
      <word key="dog" value="chien" />
      <word key="monkey" value="singe" />
    </frenchWords>
  </dictionaryConfiguration>
</configuration>
public interface IDictionaryConfiguration
{
    IDictionary<string, string> FrenchWords { get; }
}
[Test]
public void Mapping_dictionaries()
{
    var config = AutoConfig.Map<IDictionaryConfiguration>();
    config.Should().NotBeNull();
    config.FrenchWords.Should().HaveCount(3);
    config.FrenchWords.Keys.Should().ContainInOrder("cat", "dog", "monkey");
    config.FrenchWords.Values.Should().ContainInOrder("chat", "chien", "singe");
}

Elements can be used instead of attributes if the dictionary contains complex types

<configuration>
  <configSections>
    <section name="complexDictionaryConfiguration" 
             type="Nerdle.AutoConfig.Section, Nerdle.AutoConfig" />
  </configSections>
  <complexDictionaryConfiguration>
    <endpoints>
      <endPoint>
        <key>Primary</key>
        <value>
          <endpointConfiguration name="Foo" port="1" />
          <endpointConfiguration name="Bar" port="2" />
        </value>
      </endPoint>
      <endPoint>
        <key>Secondary</key>
        <value>
          <endpointConfiguration name="Baz" port="3" />
        </value>
      </endPoint>
    </endpoints>
  </complexDictionaryConfiguration>
</configuration>
public interface IComplexDictionaryConfiguration
{
    IDictionary<string, IEnumerable<IEndpointConfiguration>> Endpoints { get; }
}

public interface IEndpointConfiguration
{
    string Name { get; }
    int Port { get; }
}
[Test]
public void Mapping_complex_dictionaries()
{
    var config = AutoConfig.Map<IComplexDictionaryConfiguration>();
    config.Should().NotBeNull();
    config.Endpoints.Should().HaveCount(2);
    config.Endpoints["Primary"].Should().HaveCount(2);
    config.Endpoints["Primary"].First().Name.Should().Be("Foo");
    config.Endpoints["Primary"].First().Port.Should().Be(1);
    config.Endpoints["Secondary"].Should().HaveCount(1);
}

Clone this wiki locally