Внедрение значений свойств в Unity - преобразование типов - PullRequest
2 голосов
/ 15 сентября 2010

Я использую свободный интерфейс Unity для ввода значений свойств в объект. Моя программа получает значение свойств из внешнего источника конфигурации, XML-файла.

Проблема, с которой я сталкиваюсь, состоит в том, что свойство, которое я пытаюсь установить, имеет тип Int32, но значение, прочитанное из файла xml, изначально приводится в виде строки. Что мне нужно сделать, чтобы Unity выполнила необходимое преобразование типов? Если я настраиваю контейнер в конфигурационном файле Unity, он работает, однако я не уверен, какие дальнейшие действия требуются при выполнении этого в коде.

Вот мой код:

using (IUnityContainer taskContainer = new UnityContainer())
{
    taskContainer.RegisterType(typeof(ITask), jobType);

    // Configure properties
    foreach (PropInfo prop in jobConfig.Props)
    {
        // The next line raises an exception when setting an Int32 property
        taskContainer.RegisterType(jobType, new InjectionProperty(prop.Name, prop.Value));
    }

    ITask myTask = taskContainer.Resolve<ITask>();
}

Глоссарий: * prop.Value имеет тип Object. * свойство, которое вводится, имеет тип Int32. * jobType имеет тип Type и был назначен ранее. * PropInfo - специальный вспомогательный класс для доступа к информации о конфигурации. * jobInfo является экземпляром аналогичного вспомогательного класса.

Код хорошо работает для вставки значений свойств в строковые свойства, но когда я обращаюсь к свойству Int32, я получаю исключение: «Свойство RetryCount типа DynamicTask имеет тип Int32 и не может быть введено со значением типа String». [Очевидно, что имя свойства RetryCount, и оно находится на объекте с именем DynamicTask].

Я предполагаю, что мне нужно выполнить некоторые предыдущие шаги, чтобы зарегистрировать тип внедряемого свойства, но я не могу определить синтаксис, в документации по Unity есть несколько примеров, но я не уверен, применимы ли они к моя ситуация.

Буду очень признателен, если кто-нибудь скажет мне, какие предыдущие шаги мне нужно предпринять.

Большое спасибо заранее.

1 Ответ

0 голосов
/ 16 сентября 2010

API Unity не выполняет тот тип преобразования типов, который вы запрашиваете. Мы используем инфраструктуру .NET TypeConverter для обработки преобразования со стороны XML, но, как правило, в API это не требуется, поэтому у нас нет никакой специальной обработки для этого.

Решение, которое вы придумали, так же хорошо, как и любое другое.

...