如何将参数“ null”转换为null

强尼

我有一个如下所示的XML配置文件:

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

如何将字符串"null"转换为null值?

我尝试指定value=''但出现错误:

该属性值必须存在且不能为空。

并尝试<param name='myString'/>给出错误

无法构造字符串类型。您必须配置容器以提供此值。

最后(这似乎该页面的建议)

<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

注:有关这个这个(也可能是几个人),但这些都是约在C#中的配置,我想在XML配置。

兰迪支持莫妮卡

您可以使用类型转换器将配置中的字符串转换为空字符串。Unity不允许您将空字符串作为配置中的值,因此,不幸的是,类型转换器将必须使用“魔术字符串”来标识空值:

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

上面的“ null”是类型转换器将寻找的魔术字符串:

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();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章