我使用Unity fluent API在对象上注入属性值。我的程序从外部配置源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属性时,我得到异常:“DynamicTask类型的属性RetryCount类型为Int32,不能使用String类型的值注入”。 [显然,该属性的名称是RetryCount,它位于名为DynamicTask的对象上。)
我猜我需要做一些前面的步骤来注册正在注入的属性的类型,但我无法弄清楚语法,Unity文档中有一些例子,但我不确定它们是否适用于我的情况。
如果有人能告诉我之前需要采取的步骤,我将非常感激。
非常感谢提前。
答案 0 :(得分:0)
Unity的API不会执行您要求的类型转换。我们使用.NET TypeConverter基础结构来处理XML方面的转换,但API中通常不需要它,因此我们没有任何特殊处理。
你提出的解决方案与其他解决方案一样好。