xml
  • unity-container
  • 2015-07-21 83 views 1 likes 
    1

    我有一個看起來像這樣的XML配置文件:如何轉換參數「空」爲空

    <register type='MyType'> 
        <constructor> 
         ... 
         <param name='myString' value='null'/> 
         ... 
        </constructor> 
    </register> 
    

    如何將字符串"null"轉換成null價值?

    我已經試過指定value=''但我得到的錯誤:

    The attribute value must be present and non-empty.

    並試圖<param name='myString'/>這給錯誤

    The type String cannot be constructed. You must configure the container to supply this value.

    最後(這是什麼this page似乎暗示)

    <instance name='myStringVal' /> 
    <register type='MyType'> 
        <constructor> 
         ... 
         <param name='myString' dependencyName='myStringVal'/> 
         ... 
        </constructor> 
    </register> 
    

    其中拋出一個ArgumentNullException

    編輯:現在我也曾嘗試optional標籤

    <register type='MyType'> 
        <constructor> 
         ... 
         <param name='myString'> 
          <optional /> 
         </param> 
         ... 
        </constructor> 
    </register> 
    

    這也引發ArgumentNullException

    注:有關thisthis(也可能是幾個人),但這些是關於C#中的配置,我想用XML配置。

    +0

    爲什麼不是'if(value.Equals(」null「)){value = null; }'? –

    +1

    @ ThePcLuddite - 這看起來像是一個真正的黑客:我將通過特殊處理來污染MyType,這隻與我在Unity中使用時相關。 – Jonny

    回答

    1

    您可以使用類型轉換器將配置中的字符串轉換爲空字符串。統一不會讓你把一個空字符串作爲配置的值,因此,不幸的是,類型轉換器將不得不使用「神奇字符串」來標識空值:

    <register type="MyClass" > 
        <constructor> 
        <param name="configValue" value="null" typeConverter="NullStringConverter" /> 
        </constructor> 
    </register> 
    

    在上面的「空「是類型轉換器將尋找的魔術字符串:

    public class NullStringConverter : System.ComponentModel.TypeConverter 
    { 
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) 
        { 
         if (value == null || 
          (value.GetType() == typeof(string) && 
          String.Compare(value.ToString(), "null", StringComparison.OrdinalIgnoreCase) == 0)) 
         { 
          return null; 
         } 
    
         return value.ToString(); 
        } 
    } 
    
    1

    我不相信XML有一個真正的NULL值。你看過使用xsi:nil屬性嗎?

    相關問題