Я использую свободный интерфейс 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 есть несколько примеров, но я не уверен, применимы ли они к моя ситуация.
Буду очень признателен, если кто-нибудь скажет мне, какие предыдущие шаги мне нужно предпринять.
Большое спасибо заранее.