Я прочитал документацию Castle Windsor для Преобразователей типов и проходящих словарей , однако я получаю сообщение об ошибке, которое, по-видимому, не упоминается в документации.
Моя конфигурация:
<parameters>
<controllerTranslations>
<list>
<item>
<areaName></areaName>
<routeValue>MyRoute</routeValue>
<translationTable>
<dictionary>
<entry key="en">MyRouteEn</entry>
<entry key="fr">MyRouteFr</entry>
</dictionary>
</translationTable>
</item>
....
</list>
</controllerTranslations>
</parameters>
Мой TypeConverter:
public override object PerformConversion(IConfiguration configuration, Type targetType)
{
var converter = new Converter(configuration.Children, Context);
var areaName = converter.Get<string>("areaName");
var routeValue = converter.Get<string>("routeValue");
var translationTable = converter.Get<Dictionary<string, string>>("translationTable");
...
}
Я получаю сообщение об ошибке "Вы должны указать ключ для словарной статьи", когда конвертер пытается получитьdictionary.
Отладка DictionaryConverter в Виндзоре, фактическая ожидаемая схема выглядит следующим образом, но это не кажется правильным.Мой тест пройден, и из Windsor не выдается никаких исключений:
<parameters>
<controllerTranslations>
<list>
<item>
<areaName></areaName>
<routeValue>MyRoute</routeValue>
<translationTable>
<dictionary key="en">
<entry>MyRouteEn</entry>
</dictionary>
<dictionary key="fr">
<entry>MyRouteFr</entry>
</dictionary>
</translationTable>
</item>
....
</list>
</controllerTranslations>
</parameters>
После некоторого дальнейшего тестирования, я думаю, я нашел правильный способ реализовать это:
<parameters>
<controllerTranslations>
<list>
<item>
<areaName></areaName>
<routeValue>MyRoute</routeValue>
<translationTable type="System.Collections.IDictionary, mscorlib">
<entry key="en">MyRouteEn</entry>
<entry key="fr">MyRouteFr</entry>
</translationTable>
</item>
....
</list>
</controllerTranslations>
</parameters>