我正在使用Unity fluent API在對象上注入屬性值。我的程序從外部配置源(一個xml文件)中獲取屬性的值。使用Unity注入屬性值 - 類型轉換
我面臨的問題是,我試圖設置的屬性是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文檔中有一些例子,但我不確定它們是否適用對我的情況。
如果有人能告訴我我需要採取哪些步驟,我將不勝感激。
非常感謝提前。
我發現這可行,但我仍然想知道如何在Unity中使用流利的API來做到這一點。 (步驟類型,新注入屬性(prop.Name,Convert.ChangeType(prop.Value,stepType.GetProperty(prop.Name).PropertyType))); – Rob 2010-09-15 01:39:55