如何将参数 "null" 转换为 null
How to convert param "null" to be null
我有一个 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
注意:与this and this(可能还有其他几个)有关,但这些是关于C#中的配置,我想在XML中配置。
我认为 XML 没有真正的 NULL 值。您是否看过使用 xsi:nil
属性?
您可以使用类型转换器将配置中的字符串转换为空字符串。 Unity 不会让您将空字符串作为配置中的值,因此,不幸的是,类型转换器将不得不使用 "magic string" 来标识空值:
<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();
}
}
我有一个 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
注意:与this and this(可能还有其他几个)有关,但这些是关于C#中的配置,我想在XML中配置。
我认为 XML 没有真正的 NULL 值。您是否看过使用 xsi:nil
属性?
您可以使用类型转换器将配置中的字符串转换为空字符串。 Unity 不会让您将空字符串作为配置中的值,因此,不幸的是,类型转换器将不得不使用 "magic string" 来标识空值:
<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();
}
}