-
Notifications
You must be signed in to change notification settings - Fork 8
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);
}