Мне нужно разрешить следующую конфигурацию из файла конфигурации XML через Castle Windsor:
interface IMyConfiguration
{
string Url { get; set; }
string Token { get; set; }
Dictionary <string, Dictionary <string, Guid>> Mapping { get; set; }
}
Из XML-файла:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<components>
<component id="myConfiguration"
service="Application.IMyConfiguration, Application"
type="Application.MyConfiguration, Application">
<parameters>
<Url>example.com</Url>
<Token>00000000-0000-0000-0000-000000000000</Token>
<Mapping>
<dictionary>
<entry key="AA">${mapping_one}</entry>
<entry key="BB">${mapping_two}</entry>
</dictionary>
</Mapping>
</parameters>
</component>
<component id="mapping_one"
service="System.Collections.Generic.IDictionary`2[[System.String, mscorlib],[System.Guid, mscorlib]]"
type="System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Guid, mscorlib]]">
<parameters>
<dictionary>
<dictionary>
<entry key="aa">00000000-0000-0000-0000-000000000000</entry>
<entry key="bb">00000000-0000-0000-0000-000000000000</entry>
<entry key="cc">00000000-0000-0000-0000-000000000000</entry>
</dictionary>
</dictionary>
</parameters>
</component>
<component id="mapping_two"
service="System.Collections.Generic.IDictionary`2[[System.String, mscorlib],[System.Guid, mscorlib]]"
type="System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Guid, mscorlib]]">
<parameters>
<dictionary>
<dictionary>
<entry key="aa">00000000-0000-0000-0000-000000000000</entry>
<entry key="bb">00000000-0000-0000-0000-000000000000</entry>
<entry key="cc">00000000-0000-0000-0000-000000000000</entry>
</dictionary>
</dictionary>
</parameters>
</component>
</components>
</configuration>
Но я получаю Mapping
свойство, установленное на null
. Другие свойства разрешаются правильно.
Что я делаю не так? Как это сделать правильно?
Я пытался найти решение в Google, но, похоже, никто не использует вложенные словари для конфигурации:)
Лучшая идея, которую я получил, - использовать список вместо словаря.
UPD. Разрешение работает нормально, если я поместил mapping_one
и mapping_two
внутри компонента MyConfiguration.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<components>
<component id="myConfiguration"
service="Application.IMyConfiguration, Application"
type="Application.MyConfiguration, Application">
<parameters>
<Url>example.com</Url>
<Token>00000000-0000-0000-0000-000000000000</Token>
<Mapping>
<dictionary>
<entry key="AA">
<dictionary>
<entry key="aa">00000000-0000-0000-0000-000000000000</entry>
<entry key="bb">00000000-0000-0000-0000-000000000000</entry>
<entry key="cc">00000000-0000-0000-0000-000000000000</entry>
</dictionary>
</entry>
<entry key="BB">
<dictionary>
<entry key="aa">00000000-0000-0000-0000-000000000000</entry>
<entry key="bb">00000000-0000-0000-0000-000000000000</entry>
<entry key="cc">00000000-0000-0000-0000-000000000000</entry>
</dictionary>
</entry>
</dictionary>
</Mapping>
</parameters>
</component>
</components>
</configuration>
Но я хочу, чтобы вложенные словари были отдельными компонентами.