xml
  • unity-container
  • 2015-07-21 150 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属性吗?

    相关问题