Конвертер типов конфигурации Castle Windsor со словаремимущество - PullRequest
1 голос
/ 20 мая 2011

Я прочитал документацию 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>
...