使用Unity注入属性值 - 类型转换

时间:2010-09-14 22:52:36

标签: c# .net dependency-injection unity-container

我使用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文档中有一些例子,但我不确定它们是否适用于我的情况。

如果有人能告诉我之前需要采取的步骤,我将非常感激。

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

Unity的API不会执行您要求的类型转换。我们使用.NET TypeConverter基础结构来处理XML方面的转换,但API中通常不需要它,因此我们没有任何特殊处理。

你提出的解决方案与其他解决方案一样好。