2010-09-14 50 views
2

我正在使用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文檔中有一些例子,但我不確定它們是否適用對我的情況。

如果有人能告訴我我需要採取哪些步驟,我將不勝感激。

非常感謝提前。

+0

我發現這可行,但我仍然想知道如何在Unity中使用流利的API來做到這一點。 (步驟類型,新注入屬性(prop.Name,Convert.ChangeType(prop.Value,stepType.GetProperty(prop.Name).PropertyType))); – Rob 2010-09-15 01:39:55

回答

0

Unity的API不會進行您所要求的那種類型轉換。我們使用.NET TypeConverter基礎結構來處理來自XML端的轉換,但通常在API中不需要它,所以我們沒有任何特殊處理。

您提出的解決方案與其他解決方案一樣好。

相關問題