xml - 如何将参数 "null"转换为 null

标签 xml unity-container

我有一个如下所示的 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 相关和 this (可能还有其他几个),但这些是关于 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();
    }
}

关于xml - 如何将参数 "null"转换为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31543712/

相关文章:

c# - 如何从 Unity 映射中删除(取消注册)已注册的实例?

xml - How to read compressed bz2 (bzip2) Wikipedia dumps into stream xml record reader for hadoop map reduce

java - 在我的键盘上实现搜索按钮

java - 从 persistence.xml 获取值

java - 如何将图像添加到抽屉 View 的底部?

c# - Ninject 的 Bind.ToMethod 使用 CQRS 的 Unity 等价物

c# - 强制 WcfSvcHost.exe 使用我的自定义服务主机

c# - 有没有比这更好的方法来将函数注入(inject) Unity 中的对象?

xml - 提取响应的编码转换

dependency-injection - 如何使用 Unity 将事件处理程序注入(inject)事件